在对象数组上使用Mongoose / MongoDB $ addToSet功能
说我在猫鼬模式上有这个数组属性(“文章”):
articles: [ {
kind: 'bear',
hashtag: 'foo'
},
{
kind: 'llama',
hashtag: 'baz',
},
{
kind: 'sheep',
hashtag: 'bar',
}
]
我该怎么用
$ addToSet
https://docs.mongodb.org/manual/reference/operator/update/addToSet/
通过检查主题标签的值以查看其是否唯一来添加到此数组?
例如,如果我要将以下对象添加到上述数组中,则希望Mongo将其“重复”删除:
{ kind: 'tortoise',
hashtag: 'foo'
}
因为hashtag = foo已经被使用。
问题是我只知道如何使用$addToSet
简单的整数数组…
例如,如果文章看起来像这样:
articles: [ 1 , 5 , 4, 2]
我会这样使用$ addToSet:
var data = { "$addToSet": {
"articles": 9
}
}
model.update(data);
但是我如何使用唯一字段是字符串(在这种情况下为“标签”)的对象数组来完成同一件事?这些文档并不清楚,似乎我到处都在搜索。
谢谢
回答:
您需要使用$ne
运算符。
var data = { 'kind': 'tortoise', 'hashtag': 'foo' };Model.update(
{ 'articles.hashtag': { '$ne': 'foo' } },
{ '$addToSet': { 'articles': data } }
)
仅当“文章”数组中没有子文档且其hashtag的值等于“ foo”时,才会更新该文档。
正如@BlakesSeven在评论中提到的那样
在
$addToSet
一旦你正在测试的一个值的存在,所以这也可以被一个变得无关紧要$push
了代码清晰。但是该原理是正确的,因为它$addToSet
适用于整个对象,而不仅仅是对象的一部分。
Model.update({ { 'articles.hashtag': { '$ne': 'foo' } },
{ '$push': {'articles': data } }
)
以上是 在对象数组上使用Mongoose / MongoDB $ addToSet功能 的全部内容, 来源链接: utcz.com/qa/428621.html