嗨,我提到的是示例数据 ///集合-测试////
{
"_id" : {
"date" : ISODate("2020-02-11T17:00:00Z"),
"userId" : ObjectId("5e43e5cdc11f750864f46820"),
"adminId" : ObjectId("5e43de778b57693cd46859eb")
},
"outstanding" : 212.39999999999998,
"totalBill" : 342.4,
"totalPayment" : 130
}
{
"_id" : {
"date" : ISODate("2020-02-11T17:00:00Z"),
"userId" : ObjectId("5e43e73169fe1e3fc07eb7c5"),
"adminId" : ObjectId("5e43de778b57693cd46859eb")
},
"outstanding" : 797.8399999999999,
"totalBill" : 797.8399999999999,
"totalPayment" : 0
}
我需要构造一个执行以下操作的查询 -
我需要计算实际未结金额:
[(totalBill+outstanding)-totalPayment]
,我需要根据
{"_id": {"date","userId", "adminId"}}将这个actualOutstanding保存在同一个集合和同一个文档中
注意:两个文档中的
userId
不同。
最佳答案
在 Mongo 4.2+ 版本中引入 pipelined updates ,这意味着我们现在可以使用聚合表达式来更新文档。
db.collection.updateOne(
{
"adminId" : ObjectId("5e43de778b57693cd46859eb")
'_id."userId" : ObjectId("5e43e73169fe1e3fc07eb7c5"),
'_id.date': ISODate("2020-02-11T18:30:00Z"),
},
[
{ '$set': {
actualOutstanding: {
$subtract:[ {$add: ['$totalBill','$outstanding']},'$totalPayment']
}
} }
]);
对于任何其他 Mongo 版本,您必须将其分为 2 个操作,首先查询并计算,然后使用计算更新文档。
关于node.js - mongodb 中的 $add,$subtract 聚合框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60373006/