根据mongoDB关于$addToSet运算符的文档:
$addToSet仅确保没有重复项添加到设置,并且不影响现有的重复元素$addToSet不能保证修改集合中元素的特定顺序。
所以我的问题是:
我有一个数组字段,其中包含对象。
foo = [ {a:1, b:2}, {a:3, b:2}]
因此,当我尝试在其中推送对象时,行为无法正常工作:
db.myCollection.updateOne({"some_id"}, {$addToSet:{foo:{a:1, b:2}}})
结果是:
foo = [ {a:1, b:2}, {a:3, b:2}, {a:1, b:2}]
对重复对象的验证不起作用。为什么?
@Gibbs v3.6.8。这是我的查询:MyCollection.findOneAndUpdate({package_name:req.body.package_name,},{$addToSet:{foo:{a:2,b:3},}}},{upsert:true,multi:true,new:true}(
因为mongo默认将2
和3
视为Double
。因此CCD_ 4与CCD_。所以它插入。
//NumberInt
解决问题
为了避免这种情况,
db.getCollection('test').findOneAndUpdate({
_id: ObjectId("5f0d7ab89e001b53e3995a5b")
},
{
$addToSet: {
foo: {
a: NumberInt(2),
b: NumberInt(3)
}
}
},
{
upsert: true,
multi: true,
new: true
})