我有一个对象,在该对象中,我有一个对象数组。我正在尝试从数组中删除单个对象。我的代码现在删除整个对象,我不知道为什么。有什么想法吗?
例如: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'
}
}
});
答案 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删除整个数组(或任何其他字段)。