2016-03-06 58 views
0

我的目標:貓鼬找到並只返回文檔的一部分

[ 
    { 
     "_id": "568ad3db59b494d4284ac191", 
     "name": "Test", 
     "groups": [ 
     { 
      "number": "1", 
      "name": "GroupTest", 
      "_id": "568ad3db59b494d4284ac19b", 
      "orders": [ 
      { 
       "date": "2016-03-06T13:07:40.990Z", 
       "_id": "56dc2b9c1d47772806e4f0f4", 
       "readings": [ 
       { 
        "readingid": "568ad3db59b494d4284ac1a5", 
        "_id": "56dc2b9c1d47772806e4f0fc" 
       }, 
       { 
        "readingid": "568ad3db59b494d4284ac1a4", 
        "_id": "56dc2b9c1d47772806e4f0fb" 
       }, 
       { 
        "readingid": "568ad3db59b494d4284ac1a3", 
        "_id": "56dc2b9c1d47772806e4f0fa" 
       }, 
       { 
        "readingid": "568ad3db59b494d4284ac1a2", 
        "_id": "56dc2b9c1d47772806e4f0f9" 
       }, 
       { 
        "readingid": "56d48ae1a0f6e04413fc8b3e", 
        "_id": "56dc2b9c1d47772806e4f0f8" 
       }, 
       { 
        "readingid": "56d48ae1a0f6e04413fc8b3f", 
        "_id": "56dc2b9c1d47772806e4f0f7" 
       }, 
       { 
        "readingid": "568ad3db59b494d4284ac1a1", 
        "_id": "56dc2b9c1d47772806e4f0f6" 
       }, 
       { 
        "readingid": "568ad3db59b494d4284ac1a0", 
        "_id": "56dc2b9c1d47772806e4f0f5" 
       } 
       ] 
      }, 
      {....} 
      ] 
     }, 
     {....} 
     ] 
    }, 
    {.....} 
] 

我需要FINDE與_id順序:「56dc2b9c1d47772806e4f0f4」組中與_id:「568ad3db59b494d4284ac19b」客戶端對象中與_id:「568ad3db59b494d4284ac191」,我只想獲得該訂單子對象,而不是整個客戶端對象。

我想是這樣的:

Client.find(
{_id: "568ad3db59b494d4284ac191", groups._id: "568ad3db59b494d4284ac19b", groups.orders._id:"56dc2b9c1d47772806e4f0f4"}, 
{groups.orders:{$elemMatch:{_id: "56dc2b9c1d47772806e4f0f4"}}}) 

沒有成功Antoher嘗試:

Client.find(
{_id: req.company, groups:ObjectId(req.params.groupId)}, 
{"groups.orders":{$elemMatch:{_id: ObjectId(req.params.orderId)}}}, function(e,company){ 
    if(!e) { 
     console.log(company); 
    } 
}); 

回答

0

蒙戈是一個「面向文檔的」數據庫,因此,所有的正常操作和查詢提供回報「的文件「而不是」文檔的部分「,所以使用普通的查詢方法是無法獲得子對象的。

您可以使用兩個$unwindhttps://docs.mongodb.org/manual/reference/operator/aggregation/unwind/來使用mongo彙總框架來實現您想要的(https://docs.mongodb.org/manual/reference/operator/aggregation/)。 這將爲每個order生成一個文檔,然後使用$match來篩選出您需要的文檔。

但是,重新考慮你的數據模型可能會更好。如果您確實只需要查詢和檢索訂單,而無需獲取整個客戶對象,則最好將訂單存儲在自己的集合中,並使用對組和客戶的引用。