MongoDB基于多个数组字段的匹配

问题描述 投票:1回答:1

假设我有以下文件:

{
  "_id": "ID1",
  "A": [
    {
    "a": "abc",
    "b": true
    },
    {
    "a": "abc",
    "b": false
    },
    {
    "a": "def",
    "b": true
    }
  ]
}

{
  "_id": "ID2",
  "A": [
    {
    "a": "abc",
    "b": false
    },
    {
    "a": "abc",
    "b": false
    },
    {
    "a": "def",
    "b": true
    }
  ]
}

如何调整查询:

db.collection.aggregate([
  {$match: {"A.a": "abc"}},
  {$project: {A: 1}}
])

所以我只匹配A中至少有一个对象的文档,其中A.a=abc AND A.b=true?在此示例中,结果将是:

{
  "_id": "ID1",
  "A": [
    {
    "a": "abc",
    "b": true
    },
    {
    "a": "abc",
    "b": false
    },
    {
    "a": "def",
    "b": true
    }
  ]
}
mongodb aggregation-framework match
1个回答
0
投票

您需要使用$elemMatch

db.collection.aggregate([
  { $match: { A: { $elemMatch: { a: "abc", b: true }}},
  { $project: { A: 1 }}
])

也可以使用find查询

db.collection.find(
  { A: { $elemMatch: { a: "abc", b: true }},
  { A: 1 }
)
© www.soinside.com 2019 - 2024. All rights reserved.