Mongodb投影返回给定位置

时间:2014-02-06 09:13:47

标签: mongodb mongodb-query

我正在尝试做一些简单的事情,如返回文档的子数组。所以我的问题是:

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

我想只返回那个值。但我得到一个空的结构。我知道我可以用$ slice做到这一点。但据我所知,我不能为子阵列做这件事。我的意思是:{'house':{'$slice':0}}会起作用。但我不知道如何获得0号房和4号房。

1 个答案:

答案 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 } ] } ]

来自the documentation:

  

提示:使用$elemMatch$slice投影运算符时,MongoDB不支持之外的部分投影。

P.S:我觉得houseroom是数组令人恼火,但是有一些奇怪的名字,尤其是。因为windows 复数。