2012-02-11 70 views
0

我剛剛開始使用MongoDB構建一個小應用程序,似乎無法找到任何示例,我可以將對象添加到深度數組中,然後可以單獨查找這些數組。將對象添加到MongoDB中的深度數組中

讓我通過以下一組步驟以及我編寫的代碼進行說明。

我在MongoDB中創建一個簡單的對象,像這樣:

testing = { name: "s1", children: [] }; 
db.data.save(testing); 

當我詢問這一切看起來不錯,單純的靜止:

db.data.find(); 

,輸出:

{ 
    "_id" : ObjectId("4f36121082b4c129cfce3901"), 
    "name" : "s1", 
    "children" : [ ] 
} 

然而,在我通過「推入」一個對象來更新「children」數組後,我進入了各種問題

首先,我運行更新命令:

db.data.update({ name:"s1" },{ 
    $push: { 
    children: { name:"r1" } 
    } 
}); 

然後,當我查詢數據庫:

db.data.find({ 
    children: { name: "r1" } 
}); 

結果:

{ 
    "_id" : ObjectId("4f36121082b4c129cfce3901"), 
    "children" : [ { "name" : "r1" } ], 
    "name" : "s1" 
} 

不使任何意義對我來說,因爲我會有預計以下內容:

{ 
    "name": "r1" 
} 

有沒有更好的將數據插入到MongoDB的方法,這樣當我運行查詢時,我會提取單個對象而不是整個樹?或者可能是編寫「查找」查詢的更好方法?

回答

0

爲什麼你會希望ot只返回文檔的一部分?它會返回整個文檔,除非您告訴它哪些字段要明確包含或排除。請參閱http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields

+0

主要是由於JSON/BSON對象的工作方式,尤其是在數組中。如果有人說「爲給定的博客文章找到一個特定的評論」,那麼返回博客文章+所有其他評論並沒有意義,而只是評論對象。我在MongoDB文檔網站上發現了一個資源,它提到了構建樹的不同方式,但還沒有找到任何有用的東西來繼續。 – 2012-02-11 11:09:45

+0

使用我列出的鏈接中的功能獲取所需的字段。還有更多的情況下,您希望比返回的一個找到的字段多,而不是隻有一小部分文檔返回以響應搜索。 – 2012-02-11 16:33:01

1

默認情況下,mongodb find檢索所有字段(如sql中的* from)。您可以通過指定字段名稱 來提取特定字段。

db.data.find({ "children.name": "r1" },'children.name');