2011-12-23 128 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