查找数组中所有对象均具有特定值的文档

时间:2019-06-21 16:16:26

标签: json mongodb

我在MongoDB中拥有以下文档:

{
    name: "document1",
    data: [{
        name: "xxxxx",
        status: "delivered"
    },{
        name: "xxxxx",
        status: "In Process"
    },{
        name: "xxxxx",
        status: "Not Started"
    }]
},{
    name: "document2",
    data: [{
        name: "xxxxx",
        status: "delivered"
    },{
        name: "xxxxx",
        status: "delivered"
    },{
        name: "xxxxx",
        status: "delivered"
    }]
}

我要查找所有文档,其中“数据”数组内的所有对象的状态均为“已交付”,我曾经使用$ne: 'Not Started',但是现在引入了更多的状态选项,因此不起作用。也许我可以做一个$ne: $and并包含所有否定选项,但是任何新状态都会带来问题。

2 个答案:

答案 0 :(得分:2)

您可以将$not$elemMatch一起使用

db.collection.find({
  "data": {
    "$not": {
      "$elemMatch": {
        "status": {
          $ne: "delivered"
        }
      }
    }
  },
  "data.status": "delivered"
})

这里是小提琴https://mongoplayground.net/p/digdoFC6yF0

答案 1 :(得分:0)

您可以使用$not

{
  $and: [
     { 'data.status': { $not: /Not Started/},
     {'data.status': "delivered"}
  ]
}

请注意,$ not必须接受正则表达式,而不仅仅是纯字符串。