gpt4 book ai didi

mongodb - 基于某些条件的两个字段的总和

转载 作者:可可西里 更新时间:2023-11-01 09:26:10 25 4
gpt4 key购买 nike

这些是我在 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,购买值(value)为 0

这是我的方法:

Stat.aggregate(
[
{ $match: { placeid: "plaza" } },
{
$group: {
_id: "$guestid",
totallogs: { $sum: 1 },
totalvalue: { $sum: "$value" },
}
}
]
)

这里的问题是这个聚合没有考虑logtype

而且我不知道如何改进它。有什么帮助吗?

最佳答案

您需要使用聚合框架来$group您的文档按“guestid”并使用 $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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com