1

나는 quantinty (orders collestion)로 항목을 집계 할 mongodb 쿼리를 작성해야합니다.MongoDB 집계 및 비교

주문의 코드가 삽입 주식

db.orders.insertMany([ 
{client: {firstName: "John",lastName: "Smith" },orderedItems: [{ name: "itemA", qty: 5},{ name: "itemS", qty: 3}]}, 
{client: {firstName: "Jan",lastName: "Nowak" },orderedItems: [{ name: "itemA", qty: 56},{ name: "itemS", qty: 53}]}, 
{client: {firstName: "Klara",lastName: "Bolączka" },orderedItems: [{ name: "itemA", qty: 35},{ name: "itemS", qty: 23}]}, 
{client: {firstName: "Brajan",lastName: "Kowalski" },orderedItems: [{ name: "itemA", qty: 95},{ name: "itemS", qty: 13}]} 
]); 

코드를 삽입 agregation 후, 또는 agregation과 함께, 그것은 재고 모음에서 제공 할 수없는 항목을 식별해야하며,이 순서를 만든 사람의 이름을 반환

db.stock.insertMany([ 
{ item: "itemA", qty: 40}, 
{ item: "itemS", qty: 113} 
]); 

는 지금 내가 어떤 MongoDB의 코드를 가지고, 그건 그냥 주문

db.orders.aggregate([ 
{$unwind: "$orderedItems"}, 
{$group: { _id: "$orderedItems.name", total:{$sum: "$orderedItems.qty"}}} 
]); 
을 agregates

조회를 사용하려고했지만 어쩌면 내가 뭔가 잘못하고있는 것 같습니다.

약간의 sugestions를 얻을 수 있을까요?

+0

난 당신이 잘못하고있는 제일 먼저 완전히 당신이 묻는 질문에서 사용에서 어떤 시도를 생략한다라고 말하고 싶지만. 당신이 틀렸다면 우리는 상관하지 않지만 실제로 시도한 것은주의해야합니다. ''orders "컬렉션에서''localField''는''orderedItems.name"'이라고 생각합니다. 내가 서있는 곳에서, 당신이 실제로 무언가를 시도한다면, 당신이 물을 수있는 특정한 질문이 있습니다. 그러나 그것은 당신이 여기서 묻고있는 질문이 아니며, 제가보기에 "제발 저를 위해서 해주십시오"라는 것입니다. 이해하면 이해할 수없는 부분을 설명해 주시면 기꺼이 도와 드리겠습니다. –

+0

시간을 내서 정말 유감입니다. $ lookup을 사용하여 성명을 썼습니다.하지만 어리석은 생각이 들었습니다 ... 나는 육체적으로 기분이 좋지 않고 거의 항상 통증이 있습니다. 나는 정말로 노력하고있다. 그러나 너는 알고있다. ... db.orders.aggregate ($ 0120 :// $ itemItems {$ unwind : "$ orderedItems"}} {$ project : {_id : 0, client : 1, orderedItems : , {$ group : {_id : "$ ordersItems.name", 총계 : {$ sum : "$ ordersItems.qty"}}}, {$ lookup : {from : "주식", localField : '주문 항목 이름 ', foreignField : "item", "a"}}, {$ a : {$ ne : []}}} ]); –

+0

"시도하십시오"[질문에] (https://stackoverflow.com/posts/47337188/edit) 없습니다. ** 당신이 시도한 것을 실제로 보여주기 위해 ** 필요합니다. 또한 첫 번째 단계가 무엇인지 보여주는 주석의 명확한 지시에주의를 기울여야합니다. "Gimmie the codes"를 묻는 질문은 여기서 종료 이유입니다. 실제로 그것을 해결하는 데 약간의 노력을 보여 주면 어딘가에 도착할 수 있습니다. –

답변

0

어떻게 이런 식으로 뭔가를 싶습니다

db.orders.aggregate([ 
{ 
    $unwind: "$orderedItems" // flatten the "orderedItems" array 
}, 
{ 
    $group: { 
     "_id": "$orderedItems.name", // group by orderItems.name 
     "total": { 
      $sum: "$orderedItems.qty" // calculate total quantity 
     }, 
     "users": { 
      $addToSet: "$client" // create an array of clients who have ordered each item 
     } 
    } 
}, { 
    $lookup: { // retrieve the stock information 
     from: "stock", 
     localField: "_id", 
     foreignField: "item", 
     as: "stock" 
    } 
}, { 
    $unwind: "$stock" // flatten the result array - should always return only one document, given your data model 
}, { 
    $addFields: { // add a new field... 
     "difference": { // ...called "difference"... 
      $subtract: [ "$stock.qty", "$total" ] // ...in which we store the difference between the stock qty and the ordered qty 
     } 
    } 
}, { 
    $match: { // only return documents... 
     "difference": { // ...where the value for "difference"... 
      $lt: 0 // ...is less than zero 
     } 
    } 
}])