MongoDB, 배열에서 객체 제거


88

문서:

{
   _id: 5150a1199fac0e6910000002,
   name: 'some name,
   items: [{
      id: 23,
      name: 'item name 23'
   },{
      id: 24,
      name: 'item name 24'
   }]
}

배열에서 특정 개체를 가져 오는 방법이 있습니까? IE는 항목 배열에서 ID가 23 인 전체 항목 개체를 어떻게 가져옵니다.

나는 시도했다 :

db.mycollection.update({'_id': ObjectId("5150a1199fac0e6910000002")}, {$pull: {id: 23}});

그러나 나는 '풀'을 올바르게 사용하고 있지 않다고 확신합니다. 내가 이해하는 바에서 pull은 객체가 아닌 배열에서 필드를 가져옵니다.

전체 개체를 배열에서 꺼내는 방법에 대한 아이디어.

보너스로 나는 mongoose / nodejs에서 이것을 시도하고 있으며, 이런 유형의 것이 mongoose API에 있는지 확실하지 않지만 찾을 수 없습니다.



응 그게 다야. 감사!
lostintranslation 2013 년

답변:


148

시험..

db.mycollection.update(
    {'_id': ObjectId("5150a1199fac0e6910000002")}, 
    { $pull: { "items" : { id: 23 } } },
false,
true 
);

네, 내 구문이 잘못되었습니다. 감사! 또한 화나고 다중 옵션없이 시도했지만 효과가있었습니다.
lostintranslation 2013 년

12
그 부울 값은 무엇입니까?
Nicolas Del Valle

1
@NicolasDelValle 올바르게 기억하면 옵션 upsertmulti. : 현재의 구문 및 문서에 대해서는,이 링크를 확인 docs.mongodb.com/manual/reference/method/db.collection.update
루카스 Liesis

7

다음과 같은 문서가 있습니다.

여기에 이미지 설명 입력

주소 배열에서 주소를 삭제해야합니다

인터넷에서 많이 검색 한 후 해결책을 찾았습니다.

Customer.findOneAndUpdate(query, {$pull: {address: addressId}}, function(err, data){
        if(err) {
          return res.status(500).json({'error' : 'error in deleting address'});
        }

        res.json(data);

      });

MongoDB CLI에서이 작업을 수행하는 방법은 무엇입니까?
Ragesh D Antony

5
my database:->
        {
       "_id" : ObjectId("5806056dce046557874d3ab18"),
       "data" : [ 
           {
               "id" : 1
           }, 
           {
               "id" : 2
           }, 
           {
               "id" : 3
           }
       ]
    }

MY QUERY:->
db.getCollection('play_table').update({},{$pull:{"data":{"id":3}}},{multi:true}
OutPut:->
{
  "_id" : ObjectId("5806056dce046557874d3ab18"),
       "data" : [ 
           {
               "id" : 1
           }, 
           {
               "id" : 2
           }
       ]
    }

4

시도해 볼 수도 있습니다.

db.getCollection('docs').update({ },{'$pull':{ 'items':{'id': 3 }}},{multi:true})

3

배열의 단일 레코드의 경우 :

db.getCollection('documents').update(
    { },
    {'$pull':{ 'items':{'mobile': 1234567890 }}},
    {new:true}
);

배열에 동일한 휴대폰 번호가있는 여러 레코드의 경우 :

db.getCollection('documents').update(
    { },
    {'$pull':{ 'items':{'mobile': 1234567890 }}},
    {new:true,multi:true}
)

1

사용 $pull데이터를 제거하는

return this.mobiledashboardModel
.update({"_id": args.dashboardId}, { $pull: {"viewData": { "_id": widgetId}}})
.exec()
.then(dashboardDoc => {
     return {
        result: dashboardDoc
     }
});

0

Kishore Diyyana :

요소 속성 목록의 키를 포함하여 모든 요소를 ​​제거하려는 경우. 다음은 mongoDB unset 연산자의 예입니다.

db.UM_PREAUTH_CASE.update ({ 'Id': 123}, {$ unset : {dataElements : ""}})

JSON은 다음과 같습니다.

{ "Id": 123, "dataElements": [{ "createdBy": "Kishore Babu Diyyana", "createdByUserId": 2020}, { "createdBy": "Diyyana Kishore", "createdByUserId": 2021}]}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.