删除数组中的对象

时间:2017-11-24 01:57:05

标签: mongodb meteor

我有一个对象,在该对象中,我有一个对象数组。我正在尝试从数组中删除单个对象。我的代码现在删除整个对象,我不知道为什么。有什么想法吗?

例如:Collection example

"profiles": {
  "names": [
    {
      "first": "Joe",
      "last": "First",
      "uniqueId": "075ae7fda11"
    },
    {
      "first": "Sam",
      "last": "Last",
      "uniqueId": "1488096533"
    }
  ]
}

例如。 Update method

MyCollection.update({_id: userId}, {
  $unset: {
    profiles: {
      'names.$.first': 'Joe'
    }
  }
});

3 个答案:

答案 0 :(得分:2)

使用$pull运算符删除所有匹配的对象。

MyCollection.update({_id: userId}, {
  "$pull": {
    "profiles.names": {
      "first": "Joe"
    }
  }
});

使用$unset删除单个对象。当您使用位置$运算符进行更新操作时,数组字段必须显示为查询文档的一部分check docs

MyCollection.update({_id: userId,"profiles.names.first":"Joe"},{ 
   "$unset":{
      "profiles.names.$":""
   }  
});

重要提示$unset将匹配元素替换为null,而不是从数组中删除匹配元素。此行为使数组大小和元素位置保持一致。

因此,执行上述查询将更新您的名称数组,它将如下所示:

"profiles": {
  "names": [
    null,
    {
      "first": "Sam",
      "last": "Last",
      "uniqueId": "1488096533"
    }
  ]
}

monngodb尚不支持完全删除对象,请参阅open bug: https://jira.mongodb.org/browse/SERVER-1014

答案 1 :(得分:1)

这是你可以做到的,

MyCollection.update({ _id: userId) },
    {
        "$pull":
            {
                "profiles.names":
                    {
                        "first": "Joe"
                    }
            }
    });

答案 2 :(得分:0)

$ pull从数组中删除元素。

$ unset删除整个数组(或任何其他字段)。