比较MongoDB中文档的2个字段

时间:2017-08-24 05:19:57

标签: mongodb

考虑具有以下文件的发票集合:

{  "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 }

1 个答案:

答案 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"
            ]
        }
    }
])