2012-07-10 61 views
2

我有一個簡單的結構化文檔是這樣的:查詢部分對象 - MongoDB的

"people" : [ 
    { 
     "id" : "6241863", 
     "amount" : 5 
    } 
], 

人們可以包含多個元素。我已經成功地得到這個工作:

db.village.findOne({"people": {"$in": [{"id": "6241863", "amount": 5}]}}) 

但我想忽略量和搜索包含ID爲6241863和任何人量的任何文件。

+0

您無法在find查詢中檢索單個文檔數組的一部分。你必須在客戶端做 – 2012-07-10 14:50:47

+0

老兄你是如何保存這樣的數據,我有這樣一個shema product_video:[{thum_src:String,video_name:String,video_path:String}],我不知道如何保存數據 – paynestrike 2012-12-07 00:54:42

回答

5

按照advanced query documentation,你可以用dot notation for reaching into objects混合陣列值的查詢。下面是使用您的模式的示例:

$ mongo 
MongoDB shell version: 2.1.0 
connecting to: test 
> db.users.save({_id: 1, friends: [{id: 2, name: 'bob'}]}) 
> db.users.find({friends: {id: 2, name: 'bob'}}) 
{ "_id" : 1, "friends" : [ { "id" : 2, "name" : "bob" } ] } 

> db.users.find({'friends.id': 2}) 
{ "_id" : 1, "friends" : [ { "id" : 2, "name" : "bob" } ] } 

> db.users.find({'friends.name': 'bob'}) 
{ "_id" : 1, "friends" : [ { "id" : 2, "name" : "bob" } ] } 

> db.users.find({'friends.name': 'ted'}) 
> 
+0

如果在用戶以上存在一個對象,比如包含'users'和'admins'的'roles',你仍然只想搜索用戶,你會怎麼做? – 2017-09-29 16:39:32

0

嘗試與

db.village.findOne({"people" : { "$in" : [{ "id" : "6241863" , "amount" : { "$ne" : null } }]}})