Javascript mongodb.find().sort().limit(1).toArray()所用的时间与不使用.limit(1)所用的时间一样长
我正在尝试解决我的应用程序中的一个性能问题,我有一个查询,它从mongo返回835个相当大的文档,并且调用.toArray方法几乎需要整整一秒钟 我真的只需要具有最高值的记录,所以我尝试执行sort()和.limit(),但是当我执行.toArray()时,.limit(1)的性能与没有.limit(1)的性能一样慢 这是怎么回事?我该如何回避这个问题 我注意到Javascript mongodb.find().sort().limit(1).toArray()所用的时间与不使用.limit(1)所用的时间一样长,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我正在尝试解决我的应用程序中的一个性能问题,我有一个查询,它从mongo返回835个相当大的文档,并且调用.toArray方法几乎需要整整一秒钟 我真的只需要具有最高值的记录,所以我尝试执行sort()和.limit(),但是当我执行.toArray()时,.limit(1)的性能与没有.limit(1)的性能一样慢 这是怎么回事?我该如何回避这个问题 我注意到.nextObject()对.toArray()的性能也没有影响 var query = { "participation":{
.nextObject()
对.toArray()
的性能也没有影响
var query = {
"participation":{
"$elemMatch":{
"typeCode":"SBJ",
"role.id":{
"$elemMatch":{
"root":"1.2.3.99.100",
"extension":"123456"
}
}
}
},
"code.code":{
"$in":["first","second"]
}
};
console.time('performance');
data = mongoCollection
.find(query)
.sort({'effectiveTime.value':-1});
data.toArray(function (err, result) {
console.log(result.length) => 835
console.timeEnd('performance'); => Around 900ms
VS
注意:读取产生相同结果的查询的更简单方法是:
var query {
'participation.typeCode':'SBJ',
'participation.role.id.root': '1.2.3.99.100',
'participation.role.id.extension': '123456'
};
注意:查询本身在mongo GUI客户机中运行得很快,没有启用排序功能,但使用排序功能时,查询本身几乎需要整整一秒钟的时间
除了排序之外,还有更好的方法获得集合中属性的最高值吗 如果排序无法利用索引,则需要将所有文档读入内存,而不管
限制(1)
。您有支持查询和排序组合的索引吗?我在“effectiveTime.value”中添加了一个索引,但它似乎对性能没有任何影响。排序可能无法使用该索引,因为您的查询和排序组合必须能够利用同一个索引。你能用你的查询对象更新你的问题吗?如果排序不能利用索引,那么不管限制(1)
,所有文档都需要读入内存。您有支持查询和排序组合的索引吗?我在“effectiveTime.value”中添加了一个索引,但它似乎对性能没有任何影响。排序可能无法使用该索引,因为您的查询和排序组合必须能够利用同一个索引。你能用你的查询对象更新你的问题吗?
var query {
'participation.typeCode':'SBJ',
'participation.role.id.root': '1.2.3.99.100',
'participation.role.id.extension': '123456'
};