MongoDB:从数组中删除对象

时间:2017-09-14 00:01:11

标签: mongodb

我试图从数组的每个项目中删除一个对象,但保留对象和数组元素的其余部分。例如:

[
  {
    _id: 1,
    analytics: [
      {
        date: ISODate("2017-09-10T14:00:00Z"),
        country: { uk: 1, fr: 5, de: 15 },
        browser: { ie: 2, ff: 5, ch: 14 }
      },
    {
        date: ISODate("2017-09-10T14:00:00Z"),
        country: { uk: 1, fr: 5, de: 15 },
        browser: { ie: 2, ff: 5, ch: 14 }
      },
    ]
   },
   {
     _id: 2,
     analytics: [
      {
        date: ISODate("2017-09-10T14:00:00Z"),
        country: { uk: 5, fr: 1, de: 5 },
        browser: { ie: 14, ff: 2, ch: 5 }
      },
      {
        date: ISODate("2017-09-10T15:00:00Z"),
        country: { uk: 5, fr: 1, de: 5 },
        browser: { ie: 14, ff: 2, ch: 5 }
    ]
  }
]

我想运行一个命令,它将从每个文档的每个数组成员中删除浏览器对象。结果看起来像

[
  {
    _id: 1,
    analytics: [
      {
        date: ISODate("2017-09-10T14:00:00Z"),
        country: { uk: 1, fr: 5, de: 15 }
      },
    {
        date: ISODate("2017-09-10T14:00:00Z"),
        country: { uk: 1, fr: 5, de: 15 }
      },
    ]
   },
   {
     _id: 2,
     analytics: [
      {
        date: ISODate("2017-09-10T14:00:00Z"),
        country: { uk: 5, fr: 1, de: 5 }
      },
      {
        date: ISODate("2017-09-10T15:00:00Z"),
        country: { uk: 5, fr: 1, de: 5 }
    ]
  }
]

以下内容: db.collection.update({}, { $pull: { analytics: { country: { $exists: true } } } }, { multi: true}); ? 感谢

1 个答案:

答案 0 :(得分:0)

Neil lunn是对的。您可以编写自己的脚本并循环遍历然后执行删除,而不是期望一个更新语句为您完成所有操作。

db.getCollection('yourcollection').find({"analytics.country" : {"$exists" : true}}).
forEach(function(item) {
        item.analytics.forEach(function(analytic){
            delete analytic.browser;                
        })         
        db.getCollection('yourcollection').save(item)
})