我试图在我的应用中解决性能问题,并且我有一个查询从mongo返回835个相当大的文档,并且在它上面调用.toArray方法几乎需要一整秒。
我真的只需要具有最高值的记录,所以我试图做一个sort()然后一个.limit()但是当我做.toArray()时,性能和它一样慢.limit(1)因为没有.limit(1);
这怎么可能,如何解决这个问题?
我注意到.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":{
"$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}).limit(1);
data.toArray(function (err, result) {
console.log(result.length) => 1
console.timeEnd('performance'); => Around 900ms
注意:读取产生相同结果的查询的更简单方法是:
var query {
'participation.typeCode':'SBJ',
'participation.role.id.root': '1.2.3.99.100',
'participation.role.id.extension': '123456'
};
注意:查询本身在mongo GUI客户端中运行速度很快,没有排序,但是排序查询本身需要几乎一秒钟。
有没有更好的方法来获得除排序之外的集合中属性的最高值?