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'。据我了解,pull将从数组中拉出字段,而不是对象。

关于如何将整个对象从数组中拉出的任何想法。

另外,我尝试在mongoose / nodejs中执行此操作,也不确定这种类型的内容是否在mongoose API中,但我找不到它。



是的。谢谢!
lostintranslation 2013年

Answers:


148

尝试..

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

是的,我的语法错误。谢谢!也尝试了没有烦恼和多种选择,并且效果很好。
lostintranslation 2013年

12
这些布尔值是什么?
Nicolas Del Valle'7

1
@NicolasDelValle如果我没记错的话,这些是选项 upsertmulti。对于当前的语法和文档,请检查以下链接:docs.mongodb.com/manual/reference/method/db.collection.update
Lukas 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未设置运算符的示例:

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

JSON看起来像这样:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.