猫鼬发现回归奇怪的物体

时间:2015-08-13 14:05:38

标签: node.js mongodb mongoose mongodb-query

我当前的问题是使用db.collection.find()mongoose命令。我对mongoose / mongodb比较新,但我已经掌握了它的概念。这是我一直试图运行的测试代码:

mongoose.connect(url);
function main() 
{
    var db = mongoose.connection;
    db.on('open', function() {

        db.collection('Tweet').find({id: 631460910368956400}, function (err, data){
            console.log(data);
        })


        /*var coll = db.collection('Tweet');
         db.collection('Tweet').findOne({id: 631460910368956400},function (err, ret) {
            if(err) console.log(err);
            console.log(ret['id']);

         //db.close();
        });*/
    });
} 
main();

从未注释掉的字段返回的数据是一个奇怪的对象:

{ connection: null,
  server: null,
  disconnectHandler:
   { s: { storedOps: [], storeOptions: [Object], topology: [Object] },
     length: [Getter] },
  bson: {},
  ns: 'TEST.Tweet',
  cmd: { find: 'TEST.Tweet', limit: 0, skip: 0, query: {}, slaveOk: false },
  options:
   { skip: 0,
     limit: 0,
     raw: undefined,
     hint: null,
     timeout: undefined,
     slaveOk: false,
     db:
      { domain: null,
        _events: [Object],
        _maxListeners: undefined,
        s: [Object],
        serverConfig: [Getter],
         bufferMaxEntries: [Getter],
         databaseName: [Getter],
等等......它会持续更长时间。

IP地址是成功连接的远程连接。我可以做一些事情,比如添加和删除文档,但实际上无法从javascript中查看文档。我知道它是由于某种异步问题引起的,但是我不确定如何修复它。此外,.findOne()的注释掉的代码似乎在上面的代码中完全提取数据。

.find()函数的代码有什么问题?解释为什么数据检索中的当前错误也会很好。

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

您收到的对象是Cursor,它是用于检索实际结果的对象。

当您确定您的查询永远不会返回多个对象时(例如,在这种情况下,您通过始终唯一的_id字段进行查询),您可以使用db.collection('Tweet').findOne(来返回该对象没有额外的间接层。

但是当您的查询可能返回多个文档时,您需要使用游标。要解析光标,可以使用cursor.toArray

将其转换为文档数组
    db.collection('Tweet').find({}, function (err, cursor){
        cursor.toArray().forEach(function(doc) { 
            console.log(doc);
        });
    })

这是最简单的版本。有关游标的更多信息,请参阅上面链接的文档。

顺便说一句:到目前为止,您只使用了本机驱动程序的功能。如果要使用Mongoose查询对象,可能需要使用Mongoose模型对象的方法。