如何将 amount*(1+percent)/10 转换为 mongoDB 聚合?
how to turn amount*(1+percent)/10 into a mongoDB aggregation?
总的来说,我已经达到了这一点:
amount: { $sum: { $multiply: ["$amount", {$add: ["$percent", 1]}] } } } }]);
当我想使用 $divide
时,它给了我 unknown group operator '$divide'"
的错误。如何将其除以 10?
编辑:
db.junk.aggregate([{ $project: { _id: 0, cart_closed: 1, amount: 1,
percent: 1, shop_id: 1 } }, { $group: {
_id: { cart_closed: { month: { $month: "$cart_closed" }, year: {
$year: "$cart_closed" } }, shop_id: "$shop_id" }, amount: { $sum: {
$multiply: ["$amount", {$add: ["$percent", 1]}] } } } }]);
其实我不group by
使用那个算术表达式。
如果您遇到错误,那么您在错误的地方调用了该方法。 $group
下的任何内容都必须是分组 _id
或累加器函数,例如 $sum
:
假设您有这样的文件:
{ "amount": 100, "percent": 10 },
{ "amount": 20, "percent": 33 }
然后你就这样做:
db.junk.aggregate([
{ "$group": {
"_id": null,
"amount": { "$sum": {
"$multiply": [
"$amount",
{ "$divide": [ "$percent", 100 ] },
]
}}
}}
])
或者像这样的文档:
{ "amount": 100, "percent": .10 },
{ "amount": 20, "percent": .33 }
那就简单了$multiply
:
db.junk.aggregate([
{ "$group": {
"_id": null,
"amount": { "$sum": {
"$multiply": [
"$amount",
"$percent"
]
}}
}}
])
两者都给出了预期的结果:
{ "_id" : null, "amount" : 16.6 }
否则,如果字段不存在,则只需填写您想要的常量值。
只需调用累加器中的所有内容即可。如果你想"divide after"求和,那么你$project
在$group
阶段之后。
db.junk.aggregate([
{ "$group": {
"_id": null,
"amount": { "$sum": "$amount" }
}},
{ "$project": {
"amount": { "$multiply": [ "$amount", .70 ] }
}}
])
如果您根本不分组,那么只需在字段中使用数学即可:
db.junk.aggregate([
{ "$project": {
"amount": {
"$multiply": [
"$amount",
"$percent"
]
}
}}
])
在这样存储的地方打折 5%:
{ "amount": 100, "percent": .05 }
然后你做:
db.junk.aggregate([
{ "$project": {
"amount": {
"$multiply": [
"$amount",
{ "$subtract": [ 1, "$percent" ] }
]
}
}}
])
哪个returns:
{ "_id" : ObjectId("55bc9d29408c74e7d57c0176"), "amount" : 95 }
比原金额低 5% ( 5 )。
您的公式 returns 不同的结果。将操作命令到 BODMAS:
db.junk.aggregate([
{ "$project": {
"amount": {
"$divide": [
{ "$multiply": [
"$amount",
{ "$add": [ 1, "$percent" ] }
]},
10
]
}
}}
])
即:
{ "_id" : ObjectId("55bc9d29408c74e7d57c0176"), "amount" : 10.5 }
总的来说,我已经达到了这一点:
amount: { $sum: { $multiply: ["$amount", {$add: ["$percent", 1]}] } } } }]);
当我想使用 $divide
时,它给了我 unknown group operator '$divide'"
的错误。如何将其除以 10?
编辑:
db.junk.aggregate([{ $project: { _id: 0, cart_closed: 1, amount: 1,
percent: 1, shop_id: 1 } }, { $group: {
_id: { cart_closed: { month: { $month: "$cart_closed" }, year: {
$year: "$cart_closed" } }, shop_id: "$shop_id" }, amount: { $sum: {
$multiply: ["$amount", {$add: ["$percent", 1]}] } } } }]);
其实我不group by
使用那个算术表达式。
如果您遇到错误,那么您在错误的地方调用了该方法。 $group
下的任何内容都必须是分组 _id
或累加器函数,例如 $sum
:
假设您有这样的文件:
{ "amount": 100, "percent": 10 },
{ "amount": 20, "percent": 33 }
然后你就这样做:
db.junk.aggregate([
{ "$group": {
"_id": null,
"amount": { "$sum": {
"$multiply": [
"$amount",
{ "$divide": [ "$percent", 100 ] },
]
}}
}}
])
或者像这样的文档:
{ "amount": 100, "percent": .10 },
{ "amount": 20, "percent": .33 }
那就简单了$multiply
:
db.junk.aggregate([
{ "$group": {
"_id": null,
"amount": { "$sum": {
"$multiply": [
"$amount",
"$percent"
]
}}
}}
])
两者都给出了预期的结果:
{ "_id" : null, "amount" : 16.6 }
否则,如果字段不存在,则只需填写您想要的常量值。
只需调用累加器中的所有内容即可。如果你想"divide after"求和,那么你$project
在$group
阶段之后。
db.junk.aggregate([
{ "$group": {
"_id": null,
"amount": { "$sum": "$amount" }
}},
{ "$project": {
"amount": { "$multiply": [ "$amount", .70 ] }
}}
])
如果您根本不分组,那么只需在字段中使用数学即可:
db.junk.aggregate([
{ "$project": {
"amount": {
"$multiply": [
"$amount",
"$percent"
]
}
}}
])
在这样存储的地方打折 5%:
{ "amount": 100, "percent": .05 }
然后你做:
db.junk.aggregate([
{ "$project": {
"amount": {
"$multiply": [
"$amount",
{ "$subtract": [ 1, "$percent" ] }
]
}
}}
])
哪个returns:
{ "_id" : ObjectId("55bc9d29408c74e7d57c0176"), "amount" : 95 }
比原金额低 5% ( 5 )。
您的公式 returns 不同的结果。将操作命令到 BODMAS:
db.junk.aggregate([
{ "$project": {
"amount": {
"$divide": [
{ "$multiply": [
"$amount",
{ "$add": [ 1, "$percent" ] }
]},
10
]
}
}}
])
即:
{ "_id" : ObjectId("55bc9d29408c74e7d57c0176"), "amount" : 10.5 }