Dew*_*wfy 11 indexing name-value mongodb
我正在为我们的客户估算MongoDB.根据需求,我们需要与一些实体ent变量名称 - 值对集合相关联.
db.ent.insert({'a':5775, 'b':'b1'})
db.ent.insert({'c':'its a c', 'b':'b2'})
db.ent.insert({'a':7557, 'c':'its a c'})
Run Code Online (Sandbox Code Playgroud)
在此之后,我需要密集查询ent字段的存在:
db.ent.find({'a':{$exists:true}})
db.ent.find({'c':{$exists:false}})
Run Code Online (Sandbox Code Playgroud)
每个MongoDB 文档:
即使使用索引,$ exists也不是非常有效,尤其是.使用{$ exists:true},因为它实际上必须扫描所有索引值.
那里的专家可以提供更有效的方式(即使转换范式)来快速处理不同的名称 - 值对
您可以像这样重新设计架构:
{
pairs:[
{k: "a", v: 5775},
{k: "b", v: "b1"},
]
}
Run Code Online (Sandbox Code Playgroud)
然后你索引你的密钥:
db.people.ensureIndex({"pairs.k" : 1})
Run Code Online (Sandbox Code Playgroud)
在此之后,您将能够通过完全匹配进行搜索:
db.ent.find({'pairs.k':"a"})
Run Code Online (Sandbox Code Playgroud)
如果您使用由@WesFreeman提出的稀疏索引和当前架构,则需要为要搜索的每个键创建索引.它可能会影响写入性能,或者如果您的密钥不是静态的,则无法接受.
| 归档时间: |
|
| 查看次数: |
7322 次 |
| 最近记录: |