首页 > 解决方案 > mongodb中的更新操作

问题描述

给定以下数据,并且我正在使用带有驱动程序 3.10.1 的 java

    "room_price" : "500",
    "overall_price" : 10000,
    "total_paid" : 400,
    "paid" : [
            {
                    "price" : "200",
                    "Date" : ISODate("2019-10-06T00:00:00Z")
            },
            {
                    "price" : "200",
                    "Date" : ISODate("2019-10-06T00:00:00Z")
            }
    ],

只有在增量操作后total_paid低于overall_paid金额时,如何将新添加的价格添加到totalpaid中。注意到我已经尝试过 max() 和 inc() 但无法达到任何结果

标签: javamongodb

解决方案


以下查询可以为我们提供预期的输出:

db.collection.update(
    {
        $expr:{
            $lt:[
                {
                    $sum:["$total_paid",345]
                },
                "$overall_price"
            ]
        }
    },
    {
        $addToSet:{
            "paid":{
                "price":345,
                "Date": new Date()
            }
        },
        $inc:{
            "total_paid":345
        }
    }
)

注意:这里345是我们需要添加的新价格


推荐阅读