求解 MongoDB 中不同集合元素中唯一属性的和并获取结果价格?
若要计算不同集合元素中唯一属性的总和,请将 $$cond 与 $$group 结合使用。这会给出会计价格。
让我们创建一个包含文档的集合−
> db.demo580.insertOne( ... { ... "Name":"John", ... "Id1":"110", ... "Id2":"111", ... "Price":10.5 ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e918cebfd2d90c177b5bcae") } > > db.demo580.insertOne( ... { ... "Name":"John", ... "Id1":"111", ... "Id2":"", ... "Price":9.5 ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e918cecfd2d90c177b5bcaf") }
利用 find() 方法从集合中显示所有文档 −
> db.demo580.find();
这将生成以下输出 −
{ "_id" : ObjectId("5e918cebfd2d90c177b5bcae"), "Name" : "John", "Id1" : "110", "Id2" : "111", "Price" : 10.5 } { "_id" : ObjectId("5e918cecfd2d90c177b5bcaf"), "Name" : "John", "Id1" : "111", "Id2" : "", "Price" : 9.5 }
以下是求不同集合元素中唯一属性和的查询 −
> db.demo580.aggregate([ ... { ... $project: { ... Id1: 1, ... Id2: 1, ... Price: 1, ... match: { ... $cond: [ ... {$eq: ["$Id2", ""]}, ... "$Id1", ... "$Id2" ... ] ... } ... } ... }, ... { ... $group: { ... _id: '$match', ... Price: {$sum: '$Price'}, ... resultId: { ... $addToSet: { ... $cond: [ ... {$eq: ['$match', '$Id1']}, ... null, ... '$Id1' ... ] ... } ... } ... } ... }, ... {$unwind: '$resultId'}, ... {$match: { ... resultId: { ... $ne: null ... } ... } ... }, ... { ... $project: { ... Id1: '$resultId', ... Price: 1, ... _id: 0 ... } ... } ... ])
这将生成以下输出 −
{ "Price" : 20, "Id1" : "110" }
广告