我在 MongoDB 中有這樣的檔案:
{
"_id":{
"$oid":"614e0f8fb2f4d8ea534b2ccb"
},
"userEmail":"[email protected]",
"customId":"abc1",
"amountIn":10,
"amountOut":0,
"createdTimestamp":1632505743,
"message":"",
"status":"ERROR",
}
該amountOut欄位可以是0,或正數值。只有當它是正數時,我才需要計算amountIn和amountOut欄位的總和。
目前我正在這樣做:
query = {
'createdTimestamp': {'$gte': 1632430800},
'createdTimestamp': {'$lte': 1632517200}
}
records = db.RecordModel.objects(__raw__=query).all()
total_amount = 0
for record in records:
if record.amountOut > 0:
total_amount = record.amountOut
else:
total_amount = record.amountIn
但這非常緩慢。
我知道mongoengine有一個sum方法:
total_amount = db.PaymentModel.objects(__raw__=query).sum('amountIn')
但是我不知道如何使用這種方法的條件。
也許還有其他一些方法可以更快地根據我需要的條件計算數量?
uj5u.com熱心網友回復:
您可以使用 mongoengine 的聚合 api,它只允許您正常執行聚合。
現在你可以在代碼中使用這個管道,它利用$cond:
query = {
'createdTimestamp': {'$gte': 1632430800, '$lte': 1632517200},
}
pipeline = [
{"$match": query},
{
"$group": {
"_id": None,
"total_amount": {
"$sum": {
"$cond": [
{
"$gt": [
"$amountOut",
0
]
},
"$amountOut",
"$amountIn"
]
}
}
}
}
]
records = db.RecordModel.objects().aggregate(pipeline)
蒙戈游樂場
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/374669.html
