使用节点在mongodb上执行查找查询时获取正确的结果

时间:2014-09-17 17:31:27

标签: node.js mongodb

所以我试图运行一个nodejs脚本来对mongo数据库进行一些自定义操作。我面临的问题是使用以下脚本 -

            // a valid id obtained before
            collection.find({"id":id}, function(err, result) {
                if(err) {
                    console.log("Could not select");
                } else {
                    console.log("Select successful for id: " + id);
                    console.log(result);
                }
            });

现在,当我在运行此命令后检查result时,我只看到有关数据库的数据,其中很多数据都与select查询无关。我想要的是任何人都会期待的! id的文档列表。显然,我在这里遗漏了一些东西,有人可以指点我吗?

编辑:

因此,当我在mongo shell上运行查询时,我得到了预期的结果。

db.messages.findOne({"id":"<a random id that has a json inserted in mongo>"})

但是,当我从上面显示的脚本中运行它时,我得到的只是:

Select successful for id: <random uid from above>

{ db: 
   { domain: null,
     _events: {},
     _maxListeners: 10,
     databaseName: 'test',
     serverConfig: 
      { domain: null,
        _events: [Object],
        _maxListeners: 10,
        _callBackStore: [Object],
        _commandsStore: [Object],
        auth: [Object],
        _dbStore: [Object],
        options: [Object],
        _serverState: 'connected',
        _haProcess: [Object],
        servers: [Object],
        strategyInstance: [Object],
        emitOpen: false,
        .....
        .....
        .....

由于

1 个答案:

答案 0 :(得分:2)

result为回调提供的find参数是游标,而不是结果数组。调用toArray迭代生成的游标并获取一组文档:

collection.find({"id":id}).toArray(function(err, result) {
    if(err) {
        console.log("Could not select");
    } else {
        console.log("Select successful for id: " + id);
        console.log(result);
    }
});

如果id唯一标识单个文档,请改为使用findOne

collection.findOne({"id":id}, function(err, result) {
    if(err) {
        console.log("Could not select");
    } else {
        console.log("Select successful for id: " + id);
        console.log(result);
    }
});