如果属性数组不包含对象,MongoDB 会查找文档

Dar*_*nov 4 mongodb mongodb-query

我有一份这样的文件清单。

[
  {
     "name" : "test",
     "data" : [
         { "code" : "name", "value" : "Diego" },      
         { "code" : "nick", "value" : "Darko" },      
         { "code" : "special", "value" : true }
     ]
  },
  {
     "name" : "another",
     "data" : [
         { "code" : "name", "value" : "Antonio" },      
         { "code" : "nick", "value" : "Tony" }
     ]
  }
]
Run Code Online (Sandbox Code Playgroud)

现在我需要找到所有符合以下条件的文件:

a)不包含代码为“special”的“data”项

或者

b)包含代码为“special”且值为 false 的“data”项

就像我需要$elemMatch的对立面,或者我错过了什么?

wdb*_*ley 6

I'm assuming that you're inserting each document in your list of documents as a separate member of a collection test.

For a,

db.test.find({ "data.code" : { "$ne" : "special" } })
Run Code Online (Sandbox Code Playgroud)

For b.,

db.test.find({ "data" : { "$elemMatch" : { "code" : "special", "value" : false } } })
Run Code Online (Sandbox Code Playgroud)

Combining the two with $or,

db.test.find({ "$or" : [
    { "data.code" : { "$ne" : "special" } },
    { "data" : { "$elemMatch" : { "code" : "special", "value" : false } } }
] })
Run Code Online (Sandbox Code Playgroud)