这些是我在 Stat
集合中的文档:
{placeid: 'plaza', guestid: "xxx", logtype: "purchase", value: 12}
{placeid: 'plaza', guestid: "xxx", logtype: "visit", value: 0}
{placeid: 'plaza', guestid: "xxx", logtype: "purchase", value: 17}
{placeid: 'plaza', guestid: "yyy", logtype: "visit", value: 0}
我想聚合这些文档以获取信息(将
plaza
作为参数传递):xxx
访问次数:1,购买次数:2,购买金额为 29 yyy
访问次数:1,购买次数:0,购买次数为 0 这是我的方法:
Stat.aggregate(
[
{ $match: { placeid: "plaza" } },
{
$group: {
_id: "$guestid",
totallogs: { $sum: 1 },
totalvalue: { $sum: "$value" },
}
}
]
)
这里的问题是这种聚合没有考虑
logtype
。我不知道如何改进它。有什么帮助吗?
最佳答案
您需要使用聚合框架通过“guestid”来 $group
您的文档,并使用 $sum
累加器运算符返回总和。当然,您还需要 $cond
运算符评估“logtype”的值并返回“true case”的值。
db.Stat.aggregate([
{ "$match": { "placeid": "plaza" } },
{ "$group": {
"_id": "$guestid",
"visit": {
"$sum": {
"$cond": [
{ "$eq": [ "$logtype", "visit" ] },
1,
0
]
}
},
"purchases": {
"$sum": {
"$cond": [
{ "$eq": [ "$logtype", "purchase" ] },
1,
0
]
}
},
"value_purchase": {
"$sum": {
"$cond": [
{ "$eq": [ "$logtype", "purchase" ] },
"$value",
0
]
}
}
}}
])
它产生:
{ "_id" : "yyy", "visit" : 1, "purchases" : 0, "value_purchase" : 0 }
{ "_id" : "xxx", "visit" : 1, "purchases" : 2, "value_purchase" : 29 }
关于mongodb - 基于某些条件的两个字段的总和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37372030/