Mongo 嵌入式数组的索引和使用 $lt 和 $gt 的查询
Mongo index on embedded array and query using $lt and $gt
我有一个包含如下文档的集合:
{'data': [{'Depth': 0.0, 'Value': 123.0},
{'Depth': 0.5, 'Value': 456.0},
{'Depth': 1.0, 'Value': 111.0},
{'Depth': 1.5, 'Value': 321.0},
{'Depth': 2.0, 'Value': 987.0},
{'Depth': 2.5, 'Value': 666.0},
...
{'Depth': 3.0, 'Value': 453.0}],
'datatype': 'Sometype'
}
我想执行如下所示的查询:
curves = db.curvedata.findOne(
{
"datatype" : "Sometype",
"data": {
"$elemMatch": {
"Depth" : { "$gt": 13000, "$lt": 13100 },
"Value" : { "$gt": 20, "$lt": 100 } }}})
也就是找到一个Depth范围和一个Value范围内的所有曲线。
问题是——我能否为所有数据值编制索引,以便上述查询超快?如果是这样,$lt
和 $gt
运算符会使用索引吗?
一个查询将只使用 1 个索引。
但是,您可以创建多键索引:
.ensureIndex({Depth:1,Value:1})
然后,使用 .explain()
确保查询使用的是您刚刚创建的索引。
你一定可以!您正在寻找的是多键索引。您可以通过
之类的操作来创建它
db.curvedata.ensureIndex({"data.depth": 1})
然后就可以用同样的方法查询了。您可以在两个查询中使用 运行 .explain() 来了解您节省了多少时间,预索引和 post 索引。
创建一个索引
.ensureIndex({'data.Depth':1,'data.Value':1})
我有一个包含如下文档的集合:
{'data': [{'Depth': 0.0, 'Value': 123.0},
{'Depth': 0.5, 'Value': 456.0},
{'Depth': 1.0, 'Value': 111.0},
{'Depth': 1.5, 'Value': 321.0},
{'Depth': 2.0, 'Value': 987.0},
{'Depth': 2.5, 'Value': 666.0},
...
{'Depth': 3.0, 'Value': 453.0}],
'datatype': 'Sometype'
}
我想执行如下所示的查询:
curves = db.curvedata.findOne(
{
"datatype" : "Sometype",
"data": {
"$elemMatch": {
"Depth" : { "$gt": 13000, "$lt": 13100 },
"Value" : { "$gt": 20, "$lt": 100 } }}})
也就是找到一个Depth范围和一个Value范围内的所有曲线。
问题是——我能否为所有数据值编制索引,以便上述查询超快?如果是这样,$lt
和 $gt
运算符会使用索引吗?
一个查询将只使用 1 个索引。 但是,您可以创建多键索引:
.ensureIndex({Depth:1,Value:1})
然后,使用 .explain()
确保查询使用的是您刚刚创建的索引。
你一定可以!您正在寻找的是多键索引。您可以通过
之类的操作来创建它db.curvedata.ensureIndex({"data.depth": 1})
然后就可以用同样的方法查询了。您可以在两个查询中使用 运行 .explain() 来了解您节省了多少时间,预索引和 post 索引。
创建一个索引
.ensureIndex({'data.Depth':1,'data.Value':1})