MongoDB 当数组元素不匹配时查询到 return 空结果

MongoDB query to return empty result when an array element does not match

我有一个如下所示的 MongoDB 文档,我想查询 values.mark 大于 50 且 available=true 和 return 文档时 values.available=true。如果值中的任何一个具有 available=False,则整个文档不应 returned。

{
  "_id": 1,
  "values": [
    {
      "mark": 30,
      "available": true
    },
    {
      "mark": 80,
      "available": false
    },
    {
      "mark": 65,
      "available": true
    }
  ]
}

查询:

{"values.mark": {"$gt":50}, 'values.available': true}

查询结果

{
  "_id": 1,
  "values": [
    {
      "mark": 30,
      "available": true
    },
    {
      "mark": 80,
      "available": false
    },
    {
      "mark": 65,
      "available": true
    }
  ]
}

在上述情况下,available 的值之一是 False,因此它不应该 return 文档,而应该是空的。有人可以帮助我如何达到预期的结果吗?

也许是这样的:

  db.collection.find({
    "values.mark": {
    $gt: 50
   },
    $nor: [
    {
      "values": {
        $elemMatch: {
          "available": {
            $nin: [
              true
            ]
          }
        }
      }
    }
  ]
})

playground