我有一个子文档,其架构如下所示
{
things: [ { thing: { type: String }, otherThing: { type: String } ]
}
让我们假装它像这样填充
[
{ thing: 'Thing 1', otherThing: '123-001'},
{ thing: 'Thing 2', otherThing: '123-002'},
{ thing: 'Thing 3', otherThing: '123-003'},
{ thing: 'Thing 4', otherThing: '123-004'}
]
我想现在插入到这个Thing 5中,但我想先检查它是否存在,所以我这样做:
Things.findOneAndUpdate(
{
things: {
$elemMatch: {
thing: {
$ne: 'Thing 5'
}
}
}
},
{
$push: {
things : {
thing: 'Thing 5',
otherThing: '123-005'
}
}
})
第一次运行脚本时,会插入Thing 5。当我第二次运行它时,我预计它会失败,但它会插入一个副本" Thing 5"。
我怀疑这是因为$ elemMatch thing $ ne匹配Thing 1 - 4因此会推动。我需要做什么,它基本上说"如果事情5不在这些子文档中的任何一个"?
答案 0 :(得分:0)
正如@Veeram指出的那样,使用dot notaion代替它并且它可以工作。
此代码适用于mongo:
db.col.update({ "things.thing":{$ne:"Thing 5"} }, {$push:{things:{'thing': 'Thing 5', 'otherThing': '123-005'}}})
点符号的有用链接:
https://docs.mongodb.com/manual/core/document/#dot-notation
希望有所帮助