通过sub id“nModified”从嵌套数组中删除:0

时间:2016-03-26 00:44:34

标签: arrays mongodb

我正在尝试从子数组中删除数据,但是遇到了困难。

{
  "_id" : "0",
  "mainArray" : [
      {
        "price" : 12,
        "informations" : [
          {
            "createdBy" : "0x957a1a87d653ea2218742aeea5a05f637b6509c4",
            "orderId" : 1
          },
          {
            "createdBy" : "0x957a1a87d653ea2218742aeea5a05f637b6509c4",
            "orderId" : 2
          }
        ]
      },{
        "price" : 45,
        "informations" : [
          {
            "createdBy" : "0x957a1a87d653ea2218742aeea5a05f637b6509c4",
            "orderId" : 5
          },
          {
            "createdBy" : "0x957a1a87d653ea2218742aeea5a05f637b6509c4",
            "orderId" : 6
          }
        ]
      }

我希望输出为:

{
  "_id" : "0",
  "mainArray" : [
      {
        "price" : 12,
        "informations" : [
          {
            "createdBy" : "0x957a1a87d653ea2218742aeea5a05f637b6509c4",
            "orderId" : 1
          },
          {
            "createdBy" : "0x957a1a87d653ea2218742aeea5a05f637b6509c4",
            "orderId" : 2
          }
        ]
      },{
        "price" : 45,
        "informations" : [
          {
            "createdBy" : "0x957a1a87d653ea2218742aeea5a05f637b6509c4",
            "orderId" : 5
          }
        ]
      }

我试过这个:

db.collection.update({ "_id": "0" }, { $pull: { 'mainArray.informations': { "orderId": 6 } } });

db.collection.update({ "_id": "0" }, { $pull: { 'mainArray.0.informations': { "orderId": 6 } } });

但两者都不起作用,我得到的最好:

WriteResult({“nMatched”:1,“nUpserted”:0,“nModified”:0})

任何人都知道我哪里出错了?

1 个答案:

答案 0 :(得分:2)

您需要使用位置运算符' $' 。 $positional operator,它标识要更新的数组中的元素,而不显式指定数组中元素的位置

    db.collection.update({ "_id": "0" ,"mainArray.informations.orderId":6 },
                     { $pull: { 'mainArray.$.informations': { "orderId": 6 } } });
  

注意:数组字段必须作为查询文档的一部分出现,以确定mainArray中的匹配位置。