【发布时间】:2014-10-21 21:54:28
【问题描述】:
我想聚合一个给定类型的集合。如果类型是 foo 我想按字段 author 分组,如果类型是 bar 我想按 user。
所有这些都应该发生在一个查询中。
示例数据:
{
"_id": 1,
"author": {
"someField": "abc",
},
"type": "foo"
}
{
"_id": 2,
"author": {
"someField": "abc",
},
"type": "foo"
}
{
"_id": 3,
"user": {
"someField": "abc",
},
"type": "bar"
}
仅当类型为 bar 时,此用户字段才存在。
所以基本上是这样的......试图用$or来表达它。
function () {
var results = db.vote.aggregate( [
{ $or: [ {
{ $match : { type : "foo" } },
{ $group : { _id : "$author", sumAuthor : {$sum : 1} } } },
{ { $match : { type : "bar" } },
{ $group : { _id : "$user", sumUser : {$sum : 1} } }
} ] }
] );
return results;
}
有人对此有好的解决方案吗?
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework