说我在Mongoose架构上有这个数组属性('articles'):
articles: [
{
kind: 'bear',
hashtag: 'foo'
},
{
kind: 'llama',
hashtag: 'baz',
},
{
kind: 'sheep',
hashtag: 'bar',
}
]
我该怎么用
$ pull https://docs.mongodb.org/manual/reference/operator/update/pull/
通过检查hashtag的值以查看它是否与模式匹配来从此数组远程对象?
例如,如果我想删除items数组中hashtag ='foo'的对象 .
我最好的猜测如下,但它似乎不起作用:
var data = {
"$pull": {
"articles": {
"$elemMatch": {
"hashtag": "foo"
}
}
}
};
Model.update({},data); //doesn't quite work
这个似乎工作:
var data = {
"$pull": {
"articles": {
"hashtag": 'foo'
}
}
};
Model.update({},data); //seems to work
如果你有更好的解决方案或者你可以展示替代解决方案,请提供答案谢谢
1 回答
$pull运算符本身基本上是"mini query",因此像
$elemMatch
这样的运算符变得无关紧要,因为"query"无论如何都直接在每个数组成员上执行 .因此:
因此,它在所有数组文档中的(正确的)指定数组中查找匹配的属性,然后在匹配的位置删除它们 .
.update()
也只返回受影响文档的数量,并且当您希望更新多个文档时,通常与{ "multi": true }一起使用 .如果您只是在寻找"one"文档,或者希望修改后的文档作为回应,那么请改用.findOneAndUpdate():
虽然没有任何选择标准,但实际上并不实用,因为这只是更新了集合中的第一个文档 .