2014-02-06 60 views
0

我正在嘗試做一件簡單的事情,就像返回一個文檔的子數組一樣。所以我的查詢是:Mongodb投影返回給定的位置

db.mydocs.findOne({_id:ObjectId("af7a85f758e338d762000012")},{'house.0.room.4.windows':1}); 

我想只返回該值。但我得到一個空的結構。我知道我可以用$ slice來做到這一點。但據我所知,我無法做到子排列。我的意思是:{'house':{'$slice':0}}會工作。但我不知道怎麼弄的房子0和房間4.

回答

0

你將不得不使用鏈式$slice運營商這個工作:

db.mydocs.findOne(
    {_id:ObjectId("af7a85f758e338d762000012")}, 
    {"house" : {$slice : [0,1]},  // house.0 
    "house.room" :{$slice : [3,1]}, // house.0.room.4 
    "house.room.windows" : 1});  // house.0.room.4.windows 

由此產生的文件將是這樣的,即陣列仍然陣列(這是有益的,當映射到強類型語言):

house : [ { room : [ { windows : foo } ] } ] 

the documentation:

提示:當使用$elemMatch$slice投影算子時,MongoDB不支持對陣列部分的投影,除了

P.S:我發現houseroom是數組,但有單數名稱,因爲windows複數。

+0

這是一個很快的假例... – de3