2017-04-18 35 views
1

我有类似如下MongoDB的子文档的比赛,其中elemMatch不反对

{ 
    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'} 
] 

我想现在插入到这个东西5 ,但我想检查它是否存在,所以我这样做:

Things.findOneAndUpdate(
{ 
    things: { 
    $elemMatch: { 
     thing: { 
     $ne: 'Thing 5' 
     } 
    } 
    } 
}, 
{ 
    $push: { 
    things : { 
     thing: 'Thing 5', 
     otherThing: '123-005' 
    } 
    } 
}) 

当我第一次运行脚本时,Thi ng 5被插入。当我第二次运行它时,我预计它会失败,但会插入一个重复的“事情5”。

我怀疑这是因为$ elemMatch的东西$ ne匹配的事情1 - 4,因此将推。我需要做什么,它基本上说“如果事情5不在这些子文档中”?

+1

为什么不直接使用'{“things.thing “:{$ ne:”thing5“}}'? – Veeram

+0

按蒙戈文档应该是这样的事情:{ 事情:{$ elemMatch:{$ NE: '事5' }} } –

回答