数组中对象字段上的MongoDB筛选器

数组中对象字段上的MongoDB筛选器,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我收集了以下结构的文档,这里只包括两个文档。所有文件包括field1和array1。虽然文档中数组1内的对象数量不同,但字段_1和字段_2始终存在于对象中 { "_id": "1", "field1": "A", "array1": { "object1": { "field_1": "true", "field_2": "test" }, "object2": { "field_1": "false", "fi

我收集了以下结构的文档,这里只包括两个文档。所有文件包括field1和array1。虽然文档中数组1内的对象数量不同,但字段_1和字段_2始终存在于对象中

{
  "_id": "1",
  "field1": "A",
  "array1": {
    "object1": {
      "field_1": "true",
      "field_2": "test"
    },
    "object2": {
      "field_1": "false",
      "field_2": "test"
    }
  }
}

{
  "_id": "2",
  "field1": "A",
  "array1": {
    "object1": {
      "field_1": "true",
      "field_2": "test"
    },
    "object2": {
      "field_1": "true",
      "field_2": "test"
    },
    "object3": {
      "field_1": "false",
      "field_2": "test"
    }
  }
}

{
  "_id": "3",
  "field1": "B",
  "array1": {
    "object1": {
      "field_1": "true",
      "field_2": "test"
    },
    "object2": {
      "field_1": "false",
      "field_2": "test"
    }
  }
}
我试图进行一个查询,对于field1=a的每个文档,只返回field1和数组1中布尔字段_1为真的对象计数。除了这里包含的字段和数组之外,文档中还有更多的字段和数组,因此重要的是我只检索指定的字段和数组,而不是检索所有的字段和数组。因此,在本例中,我将得出以下结论:

{
  "_id": "1",
  "field1": "A",
  "array1": "1"
}

{
  "_id": "2",
  "field1": "A",
  "array1": "2"
}
我一直在测试下面的这个查询,但不知道哪里出了问题。然而,我可以看到计数总是等于零,所以有点不对劲

db.collection.aggregate([
  { "$match": { "field1": "A" }},
  { "$addFields": {
    "array1": {
      "$size": {
        "$filter": {
          "input": "$array1",
          "cond": { "$eq": ["$$this.v.field_1", "true"] }
        }
      }
    }
  }}
])

非常感谢您的帮助

您需要更新的只是这个{$eq:[$$this.v.field_1,true]}到{$eq:[$$this.field_1,true]},在数组字段array1中没有称为字段v的东西,也可以更改为$project而不是$addFields,以便在输出中只包含字段1、\u id和array1。试试这个:

db.collection.aggregate([{ $match: { field1: 'A' } }, {
    $project: {
        field1: 1, array1: {
            $size: {
                $filter: {
                    "input": "$array1",
                    "as": 'each',
                    "cond": { "$eq": ["$$each.field_1", "true"] }
                }
            }
        }
    }
}])

数组类型1字段是否为数组?是。array1字段的类型是数组,而对象字段是对象。你应该给出实际的文档,因为在这个问题的给定状态下,array1看起来不像数组,而是一个对象。这个object1东西也很混乱。这给了我一个一开始看起来正确的输出,但字段数组1的输出中只有零。所以肯定少了一些东西。@CHRD:你能给我实际的文档而不是手动生成的JSON吗。。该文档是否类似于{u id:1,field1:A,array1:[{field_1:true,field_2:test},{field_1:false,field_2:test}]}??实际文件非常凌乱,所以我尽量保持整洁。当我把报价单放在周围时,它似乎起作用了。谢谢。我有一个问题中提到的布尔值。所以放弃报价是可行的。