好吧,说我有一个名为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以获得所需的结果?
答案 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}}
]
}}
]);