我正在尝试做一些简单的事情,如返回文档的子数组。所以我的问题是:
db.mydocs.findOne({_id:ObjectId("af7a85f758e338d762000012")},{'house.0.room.4.windows':1});
我想只返回那个值。但我得到一个空的结构。我知道我可以用$ slice做到这一点。但据我所知,我不能为子阵列做这件事。我的意思是:{'house':{'$slice':0}}
会起作用。但我不知道如何获得0号房和4号房。
答案 0 :(得分: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 } ] } ]
提示:使用
$elemMatch
和$slice
投影运算符时,MongoDB不支持除之外的部分投影。
P.S:我觉得house
和room
是数组令人恼火,但是有一些奇怪的名字,尤其是。因为windows
是复数。