MongoDB属性迭代
MongoDB Property Iteration
我试图从根本上了解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"
}
先验地说,我看不出有什么理由将这些人分组在一个数组中,而不是单独的文档中。不过,您的用例中的其他因素可能会推荐它。
相关文章:
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 使用递归属性迭代保留属性结构
- 在对象上迭代.解构其键和属性并添加新的键和属性
- MongoDB属性迭代
- 迭代 DOM 中的属性
- 为什么我的jQuery .每次迭代都无法使用每个项目的属性
- 如何迭代json对象的嵌套属性并创建新的数组列表
- 创建一个生成器来迭代对象属性排列
- 在对象上迭代'的属性
- 在对象上迭代并添加新属性
- 使用 for 循环,如何迭代对象以向其添加 id 属性
- 访问特定属性并在 AngularJS 中迭代 JSON 数组
- 从数据绑定属性迭代键值对
- 如何轻松获取Javascript for loop的当前迭代属性
- BackboneJS:迭代模型属性并更改值
- 我的 JS 对象迭代在添加新属性时中断
- 如何附加具有迭代属性的元素
- 所有属性都设置为上次循环迭代值 [为什么?
- 访问并迭代模板内Kendo UI Listview的数组属性
- 迭代属性对