MongoDB, xóa đối tượng khỏi mảng


88

Doc:

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

Có cách nào để kéo một đối tượng cụ thể từ một mảng không? IE làm cách nào để kéo toàn bộ đối tượng item có id 23 từ mảng items.

Tôi đã thử:

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

Tuy nhiên, tôi khá chắc chắn rằng tôi không sử dụng đúng 'pull'. Từ những gì tôi hiểu, pull sẽ kéo một trường từ một mảng chứ không phải một đối tượng.

Bất kỳ ý tưởng làm thế nào để kéo toàn bộ đối tượng ra khỏi mảng.

Phần thưởng là tôi đang cố gắng thực hiện điều này trong mongoose / nodejs, cũng như không chắc loại thứ này có trong API mongoose hay không nhưng tôi không thể tìm thấy nó.


1
Bạn đã thử cái này chưa? stackoverflow.com/questions/9048424/…
Myrne Stol,

yup đó là nó. Cảm ơn!
lostintranslation,

Câu trả lời:


148

thử..

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

đúng, cú pháp của tôi đã sai. Cảm ơn! Cũng đã thử mà không có sự khó chịu và nhiều lựa chọn và điều đó cũng hoạt động.
lostintranslation,

12
Những giá trị boolean đó là gì?
Nicolas Del Valle,

1
@NicolasDelValle nếu tôi nhớ không nhầm thì đây là các tùy chọn upsertmulti. Để biết cú pháp và tài liệu hiện tại, hãy kiểm tra liên kết này: docs.mongodb.com/manual/reference/method/db.collection.update
Lukas Liesis 16/04

7

Tôi có một tài liệu như

nhập mô tả hình ảnh ở đây

Tôi phải xóa địa chỉ khỏi mảng địa chỉ

Sau khi tìm kiếm rất nhiều trên internet, tôi đã tìm ra giải pháp

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

        res.json(data);

      });

Làm cách nào để thực hiện việc này trong 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

Bạn cũng có thể thử nó:

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

3

Đối với một bản ghi trong mảng:

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

Đối với nhiều bản ghi có cùng số điện thoại di động trong mảng:

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

1

Sử dụng $pullđể xóa dữ liệu

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

0

Kishore Diyyana:

Nếu bạn muốn xóa tất cả các phần tử bao gồm khóa của danh sách thuộc tính phần tử. Đây là ví dụ về toán tử không đặt mongoDB:

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

JSON Trông như thế này:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.