여러 컬렉션 요소의 고유 속성 합계를 계산하려면 $group과 함께 $cond를 사용합니다. 이것은 결과 가격을 제공합니다.
문서로 컬렉션을 만들자 −
> 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" }