106

文件:

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

有没有办法从数组中提取特定对象?IE 如何从 items 数组中提取 id 为 23 的整个 item 对象。

我努力了:

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

但是我很确定我没有正确使用“拉”。据我了解,pull 将从数组中提取一个字段,而不是从对象中提取一个字段。

任何想法如何将整个对象拉出数组。

作为奖励,我正在尝试在 mongoose/nodejs 中执行此操作,并且不确定这种类型的东西是否在 mongoose API 中,但我找不到它。

4

7 回答 7

180

尝试..

db.mycollection.update(
    { '_id': ObjectId("5150a1199fac0e6910000002") }, 
    { $pull: { items: { id: 23 } } },
    false, // Upsert
    true, // Multi
);
于 2013-03-26T16:09:11.293 回答
9

我有一个像

在此处输入图像描述

我必须从地址数组中删除地址

在互联网上搜索了很多后,我找到了解决方案

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

    res.json(data);
});
于 2015-07-23T10:23:30.113 回答
6

我的数据库:

{
  "_id" : ObjectId("5806056dce046557874d3ab18"),
  "data" : [ 
    { "id" : 1 }, 
    { "id" : 2 }, 
    { "id" : 3 }
  ]
}
    

我的查询:

db.getCollection('play_table').update({},{$pull:{"data":{"id":3}}},{multi:true}

输出:

{
  "_id" : ObjectId("5806056dce046557874d3ab18"),
  "data" : [ 
    { "id" : 1 }, 
    { "id" : 2 }
  ]
}
于 2016-10-18T11:43:14.250 回答
6

你也可以试试:

db.getCollection('docs').update({ },{'$pull':{ 'items':{'id': 3 }}},{multi:true})
于 2018-03-23T06:01:41.943 回答
4

对于数组中的单个记录:

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

对于数组中具有相同手机号码的多条记录:

db.getCollection('documents').update(
    { },
    {
        $pull: {
            items: { mobile: 1234567890 }
        }
    },
    { new:true, multi:true }
)
于 2020-05-01T09:25:17.637 回答
1

用于$pull删除数据

return this.mobiledashboardModel
.update({"_id": args.dashboardId}, { $pull: {"viewData": { "_id": widgetId}}})
.exec()
.then(dashboardDoc => {
     return {
        result: dashboardDoc
     }
});
于 2017-02-03T12:14:46.993 回答
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 } ] }
于 2020-10-27T16:05:00.323 回答