【问题标题】:MongoDB: Building complex data structuresMongoDB:构建复杂的数据结构
【发布时间】:2011-12-23 10:20:00
【问题描述】:

我已经阅读并搜索了 MongoDB 的 JSON-BSON 结构,但我不明白(也找不到)如何拥有嵌套数据以及如何查询它。

我想了解的是,如果有人想将数组存储在数组中,如下所示:

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”内容的一些、特定或所有元素?

任何有关该主题的资源也将受到高度赞赏。

【问题讨论】:

  • 在您的示例中,multipleArray 不是数组数组。它只是对象数组。你确定你的输入是正确的吗?
  • 您好,见识不足。在这种情况下,数组数组和对象数组有什么区别?你能解释一下吗?谢谢。

标签: mongodb


【解决方案1】:

Bryan 有一些很好的建议,你应该听从。

另外,正如 Manoj 所说,您实际上拥有的是一个对象数组。以下内容可能会对您有所帮助...

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

最后一个例子的第一个元素是2,第二个是292...列表/数组用方括号[ ]表示

对象将键映射到值:{ name: "Tyler", age: 26, fav_color: "green" }

姓名映射到“Tyler”,年龄映射到 25 岁等...对象用大括号 { } 表示

mongodb 中的文档是一个对象。因此,就像上面一样,它们将键映射到值。这些值可以是字符串、数字、数组……甚至是其他(嵌套)对象)

那么,让我们看看您的文档。您有一个具有键 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 上的文档或获取一本书。

【讨论】:

  • 非常感谢,我真的非常感谢这个伟大、简单而优雅的答案。
【解决方案2】:

您的问题有点笼统,因此很难给出一个好的答案。

在使用 MongoDB 对要存储和查询的数据进行建模时,您应该考虑计划如何实际使用和查询数据。基于这个答案,你应该能够想出一个好的数据结构来存储数据。

熟悉 MongoDB 查询方法 (http://www.mongodb.org/display/DOCS/Querying) 对您很有帮助,这样您就可以了解在 MongoDB 中查询数据的多种方法。

无论您使用哪种语言,都应该有一个不错的库,可以抽象出存储和查询数据的低级细节,但了解 MongoDB 支持哪些查询方法仍然很重要。

一般来说,MongoDB 查询可以让您“触及”给定文档中的嵌套对象,其中还包括数组。

【讨论】:

  • 感谢您的链接,这正是我想要的!
猜你喜欢
  • 2018-08-18
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多