Ale*_*lls 8 mongoose mongodb node.js mongodb-query
说我在Mongoose架构上有这个数组属性('articles'):
articles: [
{
kind: 'bear',
hashtag: 'foo'
},
{
kind: 'llama',
hashtag: 'baz',
},
{
kind: 'sheep',
hashtag: 'bar',
}
]
Run Code Online (Sandbox Code Playgroud)
我该怎么用
$ addToSet https://docs.mongodb.org/manual/reference/operator/update/addToSet/
通过检查hashtag的值来添加到此数组以查看它是否唯一?
例如,如果我想将以下对象添加到上面的数组中,我希望Mongo将其"拒绝"为重复:
{
kind: 'tortoise',
hashtag: 'foo'
}
Run Code Online (Sandbox Code Playgroud)
因为hashtag = foo已被采用.
问题是我只知道如何使用$addToSet
简单的整数数组...
例如,如果文章看起来像这样:
articles: [ 1 , 5 , 4, 2]
Run Code Online (Sandbox Code Playgroud)
我会像这样使用$ addToSet:
var data = {
"$addToSet": {
"articles": 9
}
}
model.update(data);
Run Code Online (Sandbox Code Playgroud)
但是我怎么能用一个对象数组来完成同样的事情,其中唯一字段是一个字符串,在这种情况下是'hashtag'?文档没有说清楚,似乎我到处都搜索过..
谢谢
sty*_*ane 20
您需要使用$ne
运算符.
var data = { 'kind': 'tortoise', 'hashtag': 'foo' };
Model.update(
{ 'article.hashtag': { '$ne': 'foo' } },
{ '$addToSet': { 'article': data } }
)
Run Code Online (Sandbox Code Playgroud)
仅当"article"数组中没有子标签,且hashtag的值等于"foo"时,才会更新文档.
正如@BlakesSeven在评论中提到的那样
在
$addToSet
一旦你正在测试的一个值的存在变得无关紧要,所以这也可以被一个$push
代码清晰.但是这个原则是正确的,因为它$addToSet
适用于整个对象,而不仅仅是整个对象的一部分.
Model.update({
{ 'article.hashtag': { '$ne': 'foo' } },
{ '$push': {'article': data } }
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12796 次 |
最近记录: |