2016-10-21 64 views
0

有以下數據蒙戈DB查詢:項目數組元素財產

{ 
    "_id": "...", 
    "name": "John", 
    "purchases": [ 
     { 
      "date": { 
       "$date": "2016-12-20T00:00:00.000Z" 
      }, 
      "amount": 1000 
     }, 
     { 
      "date": { 
       "$date": "2016-12-23T00:00:00.000Z" 
      }, 
      "amount": 100 
     }  

    ] 
} 

如何獲得最新的採購金額爲具有不同的名稱結果字段?

爲了得到一個結果:

{ 
    "_id": "...", 
    "name": "John", 
    "purchases": [ 
      { 
       "date": { 
        "$date": "2016-12-20T00:00:00.000Z" 
       }, 
       "amount": 1000 
      }, 
      { 
       "date": { 
        "$date": "2016-12-23T00:00:00.000Z" 
       }, 
       "amount": 100 
      }  

     ] 
    }, 
    "latestPurchaseAmount": 100 
} 

回答

1

您必須使用$rename看看這個link

併爲您的最後一個項目,你應該看看這個它會幫助你Link

+0

'$ rename'似乎是一個更新操作。 但我需要重命名字段到期投影。 – STO

1

你可以做這樣的事情。以下查詢將展開收集中的所有采購,並按日期降序對採購進行分類,並將結果限制爲一個並投影相應的金額。

db.purchases.aggregate([{ 
    $unwind: "$purchases" 
}, { 
    $sort: { 
     "purchases.date": -1 
    } 
}, { 
    $limit: 1 
}, { 
    $project: { 
     _id: 0, 
     latestPurchaseAmount: "$purchases.amount" 
    } 
}]); 

輸出

{ "latestPurchaseAmount" : 100 } 
+0

謝謝,這看起來像我所需要的。 那些沒有購買的人呢,會輸出嗎? 有沒有一種方法可以過濾掉沒有錯過的人的數量? – STO

+0

沒有購買的人將不會被視爲$ unwind不會返回任何東西,如果購買數組是空的或不存在。 – Veeram