简体   繁体   English

MongoDB,从数组中删除对象

[英]MongoDB, remove object from array

Doc:文件:

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

Is there a way to pull a specific object from an array?有没有办法从数组中提取特定对象? IE how do I pull the entire item object with id 23 from the items array. IE 如何从 items 数组中提取 id 为 23 的整个 item 对象。

I have tried:我试过了:

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

However I am pretty sure that I am not using 'pull' correctly.但是我很确定我没有正确使用“拉”。 From what I understand pull will pull a field from an array but not an object.据我所知,pull 将从数组中拉出一个字段,而不是一个对象。

Any ideas how to pull the entire object out of the array.任何想法如何将整个对象从数组中拉出。

As a bonus I am trying to do this in mongoose/nodejs, as well not sure if this type of thing is in the mongoose API but I could not find it.作为奖励,我正在尝试在 mongoose/nodejs 中执行此操作,并且不确定这种类型的东西是否在 mongoose API 中,但我找不到它。

try..尝试..

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

I have a document like我有一个像

在此处输入图片说明

I have to delete address from address array我必须从地址数组中删除地址

After searching lots on internet I found the solution在互联网上搜索了很多之后,我找到了解决方案

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

    res.json(data);
});

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 }
  ]
}

你也可以试试:

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

For a single record in array:对于数组中的单个记录:

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

For a multiple records with same mobile number in array:对于数组中具有相同手机号码的多条记录:

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

Use $pull to remove the data使用$pull删除数据

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

Kishore Diyyana: Kishore Diyyana:

If you want to remove all elements including the key of the element attributes list.如果要删除所有元素,包括元素属性列表的键。

Here is the example of mongoDB unset operator:这是 mongoDB 未设置运算符的示例:

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

JSON Look like this: JSON 看起来像这样:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM