在对象数组上使用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

回到顶部