考虑具有以下文件的发票集合:
{ "invoice_no" : "1001", "payable_amount" : 100, "paid_amount" : 50 }
{ "invoice_no" : "1002", "payable_amount" : 200, "paid_amount" : 200 }
{ "invoice_no" : "1003", "payable_amount" : 300, "paid_amount" : 150 }
{ "invoice_no" : "1004", "payable_amount" : 400, "paid_amount" : 400 }
需要那些pay_amount>的文件。 paid_amount
预期结果:
{ "invoice_no" : "1001", "payable_amount" : 100, "paid_amount" : 50 }
{ "invoice_no" : "1003", "payable_amount" : 300, "paid_amount" : 150 }
答案 0 :(得分:1)
您可以找到大量使用$where operator的示例,但聚合框架可以为您执行此操作...
db.collection.aggregate([
{
"$addFields": {
"isPayableAmountGreater": { "$cmp": [ "$payable_amount", "$paid_amount" ] }
}
},
{ "$match": { "isPayableAmountGreater": 1 } }
])
或者,甚至更简单,没有创建(可能不需要的)isPayableAmountGreater
准属性:
db.collection.aggregate([
{
"$redact": {
"$cond": [
{ "$gt": [ "$payable_amount", "$paid_amount" ] },
"$$KEEP",
"$$PRUNE"
]
}
}
])