gpt4 book ai didi

MongoDB $addToSet 再次使用不同的键排序添加一个对象

转载 作者:可可西里 更新时间:2023-11-01 10:02:45 25 4
gpt4 key购买 nike

当使用 $addToSet 时,如果我运行两次,它会输入重复的对象,但 namekey 的顺序相反。无论如何要避免这种情况,这样它只会增加一次?

var categories = [{
name: 'One',
key: 'one'
}]

User.update({_id : id}, {$addToSet : {'items' : {$each : categories }}});

最佳答案

看起来 $addToSet 与对象完全匹配,包括属性的顺序。 $addToSet 运算符无法识别属性是否为任意顺序(如 OP 中所述)。

但是,当属性顺序不同时,$elemMatch 工作正常(即它可以发现嵌入的文档已经在数组中可用)。因此,变通解决方案是使用 $elemMatch$not 来检查数组中是否存在值,如果不存在则进行更新。

var categories = [{
key: 'one',
name: 'One'
}]
db.collection.update({"_id" : ObjectId("5834bd23ba41f1f22e600c7d"), "items" : {$not : {$elemMatch : categories[0]}}}, {$addToSet : {'items' : {$each : categories }}});

关于MongoDB $addToSet 再次使用不同的键排序添加一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40750692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com