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

MongoDB 중첩 $group 및 $sum을 사용하여 유사한 ProductID를 가진 주식 수를 얻으시겠습니까?


MongoDB의 $group은 지정된 _id 표현식으로 입력 문서를 그룹화하는 데 사용됩니다. 문서로 컬렉션을 만들자 −

> db.demo466.insertOne(... {...... "ProductPrice" :150,... "ProductQuantity" :1,... "ProductName" :"제품-1",.. . "ActualAmount":110,... "ProductProfit":40,... "ProductId":1... }... );{ "승인됨":true, "insertedId":ObjectId("5e80477cb0f3fa88e2279066") }>> db.demo466.insertOne(... {...... "제품 가격" :150,... "제품 수량" :1,... "제품 이름" :"제품-1",... "ActualAmount":110,... "ProductProfit":40,... "ProductId":2... }... );{ "승인된":true, "insertedId":ObjectId("5e80477db0f3fa88e2279067")}> db.demo466.insertOne(... {...... "제품가격" :170,... "제품수량" :2,... "제품명" :"제품-2",... "실제금액" " :130,... "ProductProfit" :50,... "ProductId" :3... }... );{ "승인됨" :true, "insertedId" :ObjectId("5e80477eb0f3fa88e2279068")} 

find() 메서드를 사용하여 컬렉션의 모든 문서 표시 -

> db.demo466.find();

이것은 다음과 같은 출력을 생성합니다 -

{ "_id" :ObjectId("5e80477cb0f3fa88e2279066"), "ProductPrice" :150, "ProductQuantity" :1,"ProductName" :"Product-1", "ActualAmount" :110, "ProductProfit" :40, " ProductId" :1 }{ "_id" :ObjectId("5e80477db0f3fa88e2279067"), "ProductPrice" :150, "ProductQuantity" :1,"ProductName" :"제품-1", "ActualAmount" :110, "ProductProfit" :40 , "ProductId":2 }{ "_id":ObjectId("5e80477eb0f3fa88e2279068"), "ProductPrice":170, "ProductQuantity":2,"ProductName":"Product-2", "ActualAmount":130, "ProductProfit" :50, "제품 ID" :3 }

다음은 MongoDB에서 중첩된 $group 및 $sum을 사용하는 쿼리입니다 -

> db.demo466.aggregate([... {... '$그룹':{... '_id':{... '제품명':'$제품명',... },. .. 'ActualAmount':{'$sum':'$ActualAmount'},... 'ProductQuantity':{'$sum':'$ProductQuantity'},... 'ProductId':{'$addToSet':'$ProductId'},... },... },... {... '$project':{... 'ProductQuantity':true,... 'ActualAmount':true,... 'NumberOfProductInStock':{'$size':'$ProductId'}... }... }])

이것은 다음과 같은 출력을 생성합니다 -

{ "_id" :{ "제품 이름" :"제품-2" }, "실제 금액" :130, "제품 수량" :2,"NumberOfProductInStock" :1 }{ "_id" :{ "제품 이름" :"제품 -1" }, "실제 금액":220, "제품 수량":2,"NumberOfProductInStock":2 }