总的来说,我已达到这一点:
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
使用该算术表达式。
答案 0 :(得分:1)
如果您收到错误,那么您在错误的地方调用该方法。 $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 }
如果字段不存在则另外,则只需填写所需的常量值。
只需要在累加器中调用所有内容。如果你想"除以"总和,然后是$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" ] }
]
}
}}
])
返回:
{ "_id" : ObjectId("55bc9d29408c74e7d57c0176"), "amount" : 95 }
比原始数量低5%(<5)。
您的公式会返回不同的结果。将操作订购到BODMAS:
db.junk.aggregate([
{ "$project": {
"amount": {
"$divide": [
{ "$multiply": [
"$amount",
{ "$add": [ 1, "$percent" ] }
]},
10
]
}
}}
])
这是:
{ "_id" : ObjectId("55bc9d29408c74e7d57c0176"), "amount" : 10.5 }