简单的MongoDB查询查找项目年龄> 10 learnyoumongo找功能

时间:2015-07-29 12:06:45

标签: javascript node.js mongodb

我正在经历learnyoumongo并且我被困在第3部分。基本上,测试数据库包含在挑战中,它充满了鹦鹉,目标是选择年龄更大的鹦鹉比输入。我得到一个奇怪的错误和谷歌充满了mongo 2.x解决方案,不完全相同的问题,我正在使用mongo 3.0

这是javascript代码:

var mongo = require('mongodb').MongoClient;
var parsedInput = parseInt(process.argv[2]);
var results;

mongo.connect('mongodb://localhost:27017/learnyoumongo', function(err, db){
    results = db.collection('parrots').find({ age: { $gt: parsedInput } } ).toArray(function(err, doc) //find if a value exists
    {
        if(doc) //if it does
        {
            console.log(doc);
        }
        else{
            console.log(err);
        }
    });
    //console.log(results);
    db.close();
});

这是一个奇怪的错误消息:

  

PS C:\ git \ learnyoumongo> node。\ test.js {[MongoError:服务器localhost:27017套接字已关闭]     名称:'MongoError',     消息:'server localhost:27017套接字已关闭'}

我尝试重新启动mongo,但我仍然无法将任何'parrots'数据拉出来。即使只有find({})

1 个答案:

答案 0 :(得分:3)

问题是双管齐下 - 主要问题是我希望能够使用node test.js运行查询,并查看parrots集合的结果。但是learnyoumongo有原子测试,这意味着他们会在之前和之后完全清除数据库,因此测试的唯一方法是learnyoumongo test.js,并且我一直在运行node命令的空结果集。

另一个问题是db.close(),你不能只调用db.open然后调用db.close,因为open是异步的,它会在打开后立即关闭,因此套接字关闭错误。所以你把db.close放在toArray函数中,或者放在db.open的任何其他回调中