MongoDB 聚合和计数
MongoDB aggregate and count
集合中名为 'myCollection' 的文档如下所示:
{
_id : 57b4b4e028108d801738a472,
updatedAt : 2016-08-17T19:03:01.831+0000,
createdAt : 2016-08-17T19:02:56.887+0000,
from : 57b1c2fc4bf55ba009b36c84,
to : 57b1c75e4bf55ba009b36c85,
}
我需要计算 'from' 和 'to' 的出现次数,最后得到这样的文档集合:
{
"_id" : 7b1c2fc4bf55ba009b36c84,
"occurredInFrom" : 12,
"occurredInTo" : 16
}
其中 _id 来自“$from”或“$to”。
我写的错误聚合查询是这样的:
{
$group: {
_id: "$from",
occurredInFrom: { $sum: 1 },
occurredInTo: { $sum: 1}
}
}
我绝对可以看出 _id: "$from" 是不够的。你能告诉我正确的方法吗?
注:'myCollection'的结构不是最终的,如果您认为有更好的结构,欢迎提出。
试试这个
db.myCollection.aggregate([
{ $project:
{ _id: 0,
dir: [
{id:"$from", from:{"$sum":1}, to:{"$sum":0}},
{id:"$to", from:{"$sum":0}, to:{"$sum":1}}
]
}
},
{ $unwind : "$dir" },
{ $group:
{
_id: "$dir.id",
occurredInFrom: { $sum: "$dir.from" },
occurredInTo: { $sum: "$dir.to" }
}
}
])
集合中名为 'myCollection' 的文档如下所示:
{
_id : 57b4b4e028108d801738a472,
updatedAt : 2016-08-17T19:03:01.831+0000,
createdAt : 2016-08-17T19:02:56.887+0000,
from : 57b1c2fc4bf55ba009b36c84,
to : 57b1c75e4bf55ba009b36c85,
}
我需要计算 'from' 和 'to' 的出现次数,最后得到这样的文档集合:
{
"_id" : 7b1c2fc4bf55ba009b36c84,
"occurredInFrom" : 12,
"occurredInTo" : 16
}
其中 _id 来自“$from”或“$to”。
我写的错误聚合查询是这样的:
{
$group: {
_id: "$from",
occurredInFrom: { $sum: 1 },
occurredInTo: { $sum: 1}
}
}
我绝对可以看出 _id: "$from" 是不够的。你能告诉我正确的方法吗?
注:'myCollection'的结构不是最终的,如果您认为有更好的结构,欢迎提出。
试试这个
db.myCollection.aggregate([
{ $project:
{ _id: 0,
dir: [
{id:"$from", from:{"$sum":1}, to:{"$sum":0}},
{id:"$to", from:{"$sum":0}, to:{"$sum":1}}
]
}
},
{ $unwind : "$dir" },
{ $group:
{
_id: "$dir.id",
occurredInFrom: { $sum: "$dir.from" },
occurredInTo: { $sum: "$dir.to" }
}
}
])