javascript – MongoDB属性迭代

我试图从根本上了解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,由于安全性和性能问题,您应该避免使用它.原则是“不要使用数据作为密钥”;数据应该是值,并且键提供用于构造查询的特定,不变的名称.在您的情况下,最自然的结构似乎是每个文档代表一个这样的人

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

先验我认为没有理由将人们组合在一个数组而不是单独的文档中.但是,您的用例中的其他一些因素可能会推荐它.

点赞