Computer >> 컴퓨터 >  >> 프로그램 작성 >> MongoDB

MongoDB의 다른 컬렉션 요소에 있는 고유한 속성을 합하고 결과 가격을 얻으시겠습니까?


여러 컬렉션 요소의 고유 속성 합계를 계산하려면 $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" }