MongoDB:匹配数组中的非空doc

Dmi*_*tri 33 mongodb nosql

我有一个如此结构的集合:

{
  _id: 1,
  score: [
    {
      foo: 'a',
      bar: 0,
      user: {user1: 0, user2: 7}
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我需要找到所有具有至少一个"得分"(得分数组中的元素)且具有特定值"bar"和非空"用户"子文档的文档.

这就是我提出的(似乎它应该工作):

db.col.find({score: {"$elemMatch": {bar:0, user: {"$not":{}} }}})
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误:

error: { "$err" : "$not cannot be empty", "code" : 13030 }
Run Code Online (Sandbox Code Playgroud)

还有其他办法吗?

Dmi*_*tri 70

弄清楚:{ 'score.user': { "$gt": {} } }将匹配非空文档.

  • 它可能,但对于数组,你可能最好使用:`{foo:{$ not:{$ size:0}}}` (6认同)
  • @knoxxs:查看关于排序顺序的文档:http://docs.mongodb.org/manual/reference/bson-types/ - 一个空文档在任何非空文档之前排序,但是null将在任何之前排序(包括空)doc. (2认同)