2011-12-23 165 views
1

我已閱讀並搜索了MongoDB的JSON-BSON構造,但我不明白(找不到)如何嵌套數據以及如何查詢它。MongoDB:構建複雜的數據結構

我想學什麼,如果有人想在陣列中存儲陣列中:

id: x, 
name: y, 
other: z, 
multipleArray: [ 
(lab1: A, lab2: B, lab3:C), 
(lab1: AB, lab2: BB, lab3:CB) 
(lab1: AC, lab2: BC, lab3:CC) 
.. 
.. 
] 

如何存儲這些數據,然後檢索一些特定或multipleArray的」所有元素「內容?

關於這個問題的任何資源也將不勝感激。

+1

在你的例子中,multipleArray不是陣列的數組。它只是一組對象。你確定你的輸入是正確的嗎? – Manoj 2011-12-23 10:59:24

+0

你好,對不起,我的知識不足。在這種情況下,數組數組和數組對象的區別是什麼?你能解釋一下嗎?謝謝。 – Phil 2011-12-23 11:28:33

回答

4

布賴恩有一些很好的建議,你應該聽從。而且,正如Manoj所說,你實際上擁有的是一組對象。以下可能會幫助你有點...

列表只是排序的序列:[1,2,3...][2,292,111]

在過去的例子中的第一個元素是2,第二個是292 ...列表/陣列表示用方括號[ ]

對象映射鍵的值:{ name: "Tyler", age: 26, fav_color: "green" }

更名爲「泰勒」,年齡地圖映射到25,等等...而對象按括號表示{ }

mongodb中的文檔是一個對象。所以,如上所述,他們將鍵映射到值。這些值可以是字符串,數字,數組或其他(嵌套)對象)

所以,讓我們來看看您的文件。你有一個包含key id,name,other和multipleArray的對象(文檔)。多重數組映射到的值是對象{ }的數組[ ]

{ 
    id: x, 
    name: y, 
    other: z, 
    multipleArray: [ 
     {lab1: "A", lab2: "B", lab3:"C"}, 
     {lab1: "AB", lab2: "BB", lab3:"CB"}, 
     {lab1: "AC", lab2: "BC", lab3:"CC"} 
    ] 
} 

MongoDB中有這個功能叫做multikeys,它基本上把你要查詢的價值,並試圖匹配它的陣列中的每個值。

如果你想找個地方multipleArray包含在文檔{lab1: "A", lab2: "B", lab3: "C"}文檔,您查詢是這樣的:db.data.find({multipleArray: {lab1: "A", lab2: "B", lab3: "C"}})

我假設已定義的x,y和z。

還有更多的微妙之處和複雜性,但是如果您想了解更多信息,請閱讀mongodb網站上的文檔here或者獲得一本書。

+0

非常感謝,我真的很感謝這個偉大,簡單和優雅的答案。 – Phil 2011-12-26 01:31:15

1

你的問題有點泛泛,因此很難給出一個很好的答案。

當使用MongoDB建模要存儲和查詢的數據時,應該考慮計劃如何實際使用和查詢數據。基於這個答案,你應該能夠想出一個好的數據結構來存儲數據。

對自己熟悉MongoDB查詢方法(http://www.mongodb.org/display/DOCS/Querying)是很好的,因爲您可以理解在MongoDB中查詢數據的多種方法。

無論你使用什麼語言,都應該有一個很好的庫,它應該抽象出存儲和查詢數據的低級細節,但是知道MongoDB支持哪些查詢方法仍然很重要。

一般來說,MongoDB查詢可以讓您「接觸」給定文檔中的嵌套對象,並且還包含數組。

+0

感謝您的鏈接,這正是我一直在尋找的! – Aaron 2012-05-23 08:30:54