如果删除'限制',mongodb'排序'不起作用

时间:2014-02-21 06:14:52

标签: node.js mongodb sorting

我是mongodb的新手,我正在尝试排序选项:http://mongodb.github.io/node-mongodb-native/markdown-docs/queries.html#sorting

我的代码:

MongoClient.connect('mongodb://127.0.0.1/test', function (err, db) { //connect to mongodb   
    var collection = db.collection('qr');
    var options = {
        "limit": 20,
        "sort": "CARDNO"
    }
    collection.find({}, options).toArray(function (err, data) {
        console.log(data.length);
        res.send(JSON.stringify(data));
    });
    console.log("successfully connected to the database");
    //db.close();
});

返回排序结果的前20条记录。

但是当我删除“限制”

MongoClient.connect('mongodb://127.0.0.1/test', function (err, db) { //connect to mongodb   
    var collection = db.collection('qr');
    var options = {
        "sort": "CARDNO"
    }
    collection.find({}, options).toArray(function (err, data) {
        console.log(data.length);
        res.send(JSON.stringify(data));
    });
    console.log("successfully connected to the database");
    //db.close();
});

我收到错误

我试过

console.log(err)

它在控制台中提供[Error: parseError occured]

/home/local/user/Desktop/node10k/routes/user.js:23
                console.log(data.length);
                                ^
TypeError: Cannot read property 'length' of null

注意:我的收藏包含84k条记录。

我的问题:如果我设置了一些限制,它工作正常,当我尝试74k时,我尝试了64k限制其工作我遇到了问题[Error: parseError occured]

"limit" : 64020

的结果
Express server listening on port 3000
successfully connected to the database
64020
GET /users 200 11735ms - 15.32mb

"limit" : 74020

的结果
Express server listening on port 3000
successfully connected to the database
[Error: parseError occured]

为什么当“限制”超过64k时我会收到错误?

Neil在评论中通知了我:

  1. 代码有语法问题
  2. 可能是toArray的问题
  3. 答案:

    1. 我得到的代码引用了mongodb页面(在开头给出了链接)所以这不是一个语法问题,如果有限制,它可以正常使用我的代码。所以不是语法错误

    2. 我试过

      collection.find()。toArray(function(err,data){     if(错误){         的console.log(ERR);     } else {         执行console.log(data.length)     }     res.send(JSON.stringify(数据)); });

    3. 我得到的结果没有错误。

      Express server listening on port 3000
      successfully connected to the database
      84050
      GET /users 200 17525ms - 20.1mb
      

      所以不是toArray()问题

      此问题仅附带排序,代码可以正常使用64k数据。为什么呢?

1 个答案:

答案 0 :(得分:2)

你的排序从未在第一个例子中起作用。语法错误

var options = {
   "sort": { "CARNO": 1 }
};

-1降序。

同样,不是问题,但我看到你在另一个问题上做同样的事情,你 json.stringify err,只需将其登录到控制台。然后你会看到你做错了什么。

以下用法很好,所以如果你没有得到结果,那么你正在做一些不同于这里的呈现方式:

var MongoClient = require('mongodb')。MongoClient;

MongoClient.connect('mongodb://127.0.0.1/test', function (err, db) {

  var collection = db.collection('stuff');

  var options = {
    "sort": { "duration": -1 },
  };
  collection.find({},options).toArray(function(err, data) {
    if (err) {
      console.log(err);
    }
    console.log(data);
  });

});

您还可以<{>> 将.sort()链接到.toArray()之前的搜索结果,如果这仍然无法解决您的问题。