MongoDb查询-将子数组与数组中的多个项进行匹配

o2rvlv0m  于 2023-08-04  发布在  Go
关注(0)|答案(1)|浏览(147)

我有这样的记录

{
  "formAnswers": {
    "id": 1,
    "entries": [
      {
        "name": "John",
        "favoriteColor": "red",
      },
      {
        "name": "Kevin",
        "favoriteColor": "green",
      },
      {
        "name": "Susan",
        "favoriteColor": "blue",
      }
    ]
  }
}

字符串
我想匹配这个记录,因为它有两个条目,一个是favoriteColor:“red”和另一个favoriteColor:“绿色”-两者同时。
我在想这样的东西会起作用,但它不...

{
  "formAnswers.entries": {
    "$elemMatch": {
      "$all": ["red", "green"]
    }
  }
}


如果我正在寻找“红色”和“紫色”,它不应该匹配,因为没有favoriteColor的条目:子数组在另一个属性“formAnswers”下的事实让我很难受。我可以让它工作,但我需要查询匹配所描述的文档。这种额外的间接性强调了我非常有限的mongo查询知识。

lo8azlld

lo8azlld1#

删除$elemMatch(因为您只是在单个字段上查询),并将.favoriteColor添加到查询中的字段标识符(因为您不是在整个子文档上查询):

db.collection.find({
  "formAnswers.entries.favoriteColor": {
    "$all": [
      "red",
      "green"
    ]
  }
})

字符串
Playground demonstration

相关问题