2013-08-25 197 views
4

我有这样的文档集合:如何检索嵌套的对象?

{ 
    key : "bla" 
    list : [ 
     {id:1}, 
     {id:2} 
    ] 
} 

我如何获得这个对象:{id:1}

我想这样的查询:db.myCollection.find({"key":"bla", "list.id":1})

找到的条目,但返回完整的文档,而不是仅{id:1}

+0

可能重复的[MongoDB只提取数组中的选定项](http://stackoverflow.com/questions/3985214/mongodb-extract-only-the-selected-item-in-array) – JohnnyHK

回答

4

$算你找什么:

db.test.insert({key: "blah",list :[{id:1},{id:2}]}) 

db.test.find({'list.id' : 1},{'list.$': 1 }) 
#Returns: 
#{ "_id" : ObjectId("521a78b342abf388fbaacf91"), "list" : [ { "id" : 1 } ] } 

db.test.find({'list.id' : 2},{'list.$': 1 }) 
#Returns: 
#{ "_id" : ObjectId("521a78b342abf388fbaacf91"), "list" : [ { "id" : 2 } ] } 

如果您不需要文档的_id,您也可以排除:

db.test.find({'list.id' : 2},{'list.$': 1 , _id: 0}) 
#Returns: 
#{ "list" : [ { "id" : 2 } ] } 

有关更多信息,请查看$ operatorread operations的文档。

+0

好的,谢谢。我仍然需要检索“list”键的对象(最好是直接获取数组),但这可能是目前唯一的方法。 – Ixx