mongodb .find()。sort()。limit(1).toArray()只需没有.limit(1)

时间:2015-10-14 18:36:02

标签: javascript node.js mongodb

我试图在我的应用中解决性能问题,并且我有一个查询从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客户端中运行速度很快,没有排序,但是排序查询本身需要几乎一秒钟。

有没有更好的方法来获得除排序之外的集合中属性的最高值?

0 个答案:

没有答案