从单个MongoDB查询中获取多个数据片段

时间:2017-11-18 19:24:35

标签: mongodb nosql aggregation-framework

好吧,说我有一个名为Baz的文档集合,说它看起来像:

[
    { _id: 1, foo: true, bar: true },
    { _id: 2, foo: false, bar: true },
    { _id: 3, foo: true, bar: false },
    { _id: 1, foo: false, bar: false }
]

我想查询它并获得这样的结果:

[
    { isFoo: [
        { _id: 1, foo: true, bar: true },
        { _id: 3, foo: true, bar: false }
    ], isBar: [
        { _id: 1, foo: true, bar: true },
        { _id: 2, foo: false, bar: true }
    ]}
]

如您所见,它为我提供了包含foo: true的所有文档的数组,以及包含bar: true的所有文档的列表。这就是我想要的结果!在此先感谢SO社区!

总之

可以用什么查询来反对Baz以获得所需的结果?

1 个答案:

答案 0 :(得分:4)

我认为$facet运算符提供了几乎完全您所寻求的内容,唯一的区别在于$facet您将从aggregate()获取单个文档两个数组字段:

{
    "isFoo" : [
       {  "_id" : 1,  "foo" : true,  "bar" : true  },
       {  "_id" : 3,  "foo" : true,  "bar" : false  }
    ],
    "isBar" : [
       {  "_id" : 1,  "foo" : true,  "bar" : true },
       {  "_id" : 2,  "foo" : false, "bar" : true }
    ]
}


db.baz.aggregate([
  {$facet: {
    "isFoo": [
      {$match: {"foo": true}}
      ]
    ,"isBar": [
      {$match: {"bar": true}}
      ]
   }}
 ]);