MongoDB属性迭代

MongoDB Property Iteration

本文关键字:迭代 属性 MongoDB      更新时间:2023-09-26

我试图从根本上了解MongoDB是如何工作的,但无法解决这个问题。我想这是不可能的,但也许我错了?

给定以下JSON结构:

{
"bob": { "height": 68, "gender": "m" },
"sally": { "height": 48, "gender": "f" }
}

当这个结构被反序列化为JavaScript时,我可以很容易地迭代这个对象的属性来获得人员列表。请注意,此人员列表可以/将是动态的。因此,有时"bob"不存在,有时"mike"可能存在,等等。

然而,对于MongoDB查询,这似乎是不可能的。MongoDB似乎需要像这样的数据在一个数组中。然后我可以查询到"people"数组,然后对其进行迭代。

我想确认一下,事实上,MongoDB引擎不能像JS那样迭代属性。如果这是真的,我想这是有道理的。由于JSON结构将数据和模式表示为一体,因此具有这样的动态属性可能会使文档很难(如果不是不可能的话)进行索引。也许这就是原因?我希望有人能证实。

我希望我可以使用MongoDB来存储返回我的UI的相同JSON结构,但我认为需要将该结构修改为类似以下的结构来存储数据。

{ "people": [{
"name": "bob", "height": 68, "gender": "m" }, {
"name": "sally", "height": 48, "gender": "f" }]
}

没错。除了显式命名密钥之外,MongoDB没有基于密钥名称操作文档的功能。一个例外是服务器端javascript,由于安全和性能问题,您应该避免使用它。原则是"不要将数据用作密钥";数据应该在值中,键提供用于构造查询的特定、不变的名称。在您的情况下,最自然的结构似乎是让每个文档都表示一个person,就像一样

{
    "name" : "bob",
    "height" : 68,
    "gender" : "m"
}

先验地说,我看不出有什么理由将这些人分组在一个数组中,而不是单独的文档中。不过,您的用例中的其他因素可能会推荐它。