(很抱歉,如果这是一个简单的问题。)如何在此嵌套文档结构(MongoDB)中进行查询?
我有一个看起来像这样(Python语法)文件:
{
'_id': SomeObjectId,
'features': [
{'id': 'featureX' , 'value': 6},
{'id': 'featureY', 'value': 45}
]
}
采用这种结构可以很容易地找到包含“featureX”中的所有文件功能列表。但我也有兴趣检索子文档中的相关值。 我想在Python中,如果我得到这样的查询文档:db.articles.find({'features.id': 'featureX'})
然后我需要遍历数组的'功能'找出正确的'价值'。有没有其他类型的查询可以给我有趣的价值(在这种情况下,我不需要检索完整的文档,只有部分{'id':'featureX','value'): 6},该不会是在阵列中的可预测指标值
PS:我想我会设计不同的文件,但我仍然有兴趣知道,如果上述resquest是可行的
。这里是新的结构:
{
'_id': SomeObjectId,
'features': {
'featureX': { 'someproperty':'aaa', 'value':6 },
'featureY': {'someproperty' :'bbb', 'value':45}
}
}
是否有关于这个d任何问题esgin? 在我的例子'featureX'中,'featureY'是唯一的,因此使用它作为字典键不是问题。
编辑: 我需要澄清的是,我将需要在文档中原子地更新'featureX'和'featureY',并且需要更新MongoDB does not support transactions。 另外,第二种设计虽然不允许检索子文档,但应该能够很容易地在客户端代码中快速获得所需的信息,假设我可以查询具有特定键的子文档。
我认为这个查询应该做的工作:
result = db.articles.find_one({ 'features.featureX': {'$exists': True} })
interesting_value = result['features']['featureX']['value']
谢谢。我认为我的备用模式能够快速检索所需的值,而无需扫描客户端代码中的所有子文档。我想我不能将功能放在单独的文档中,因为我需要功能的原子更新,并且mongodb不支持事务。 – ixi
是的,这是真的,它更容易扫描客户端的子文档,因为你有一个字典类结构。 – RameshVel