Javascript find()的MongoClient版本实际返回什么?

Javascript find()的MongoClient版本实际返回什么?,javascript,node.js,mongodb,mongodb-query,database,Javascript,Node.js,Mongodb,Mongodb Query,Database,我正在使用native node.js mongodb驱动程序,刚刚对一个集合执行了一个基本的find()操作,它返回了一些我不理解的结果。我并不希望了解这个对象的所有信息,只是作为初学者,我想知道应该从哪里开始解析这个对象,以获得所需的集合 其他有趣的事实:我正在使用OsX 谢谢你的关心!我将在下面包含此对象 Readable { connection: null, server: null, disconnectHandler: { s: { storedOps: [],

我正在使用native node.js mongodb驱动程序,刚刚对一个集合执行了一个基本的
find()
操作,它返回了一些我不理解的结果。我并不希望了解这个对象的所有信息,只是作为初学者,我想知道应该从哪里开始解析这个对象,以获得所需的集合

其他有趣的事实:我正在使用OsX

谢谢你的关心!我将在下面包含此对象

Readable {
  connection: null,
  server: null,
  disconnectHandler: 
   { s: { storedOps: [], storeOptions: [Object], topology: [Object] },
     length: [Getter] },
  bson: {},
  ns: 'epc.customers',
  cmd: 
   { find: 'epc.customers',
     limit: 0,
     skip: 0,
     query: {},
     slaveOk: true,
     readPreference: { preference: 'primary', tags: undefined, options: undefined } },
  options: 
   { skip: 0,
     limit: 0,
     raw: undefined,
     hint: null,
     timeout: undefined,
     slaveOk: true,
     readPreference: { preference: 'primary', tags: undefined, options: undefined },
     db: 
      EventEmitter {
        domain: null,
        _events: {},
        _eventsCount: 0,
        _maxListeners: undefined,
        s: [Object],
        serverConfig: [Getter],
        bufferMaxEntries: [Getter],
        databaseName: [Getter],
        options: [Getter],
        native_parser: [Getter],
        slaveOk: [Getter],
        writeConcern: [Getter] },
     promiseLibrary: [Function: Promise],
     disconnectHandler: { s: [Object], length: [Getter] } },
  topology: 
   EventEmitter {
     domain: null,
     _events: 
      { reconnect: [Function],
        timeout: [Object],
        error: [Object],
        close: [Function],
        destroy: [Object] },
     _eventsCount: 5,
     _maxListeners: undefined,
     s: 
      { options: [Object],
        callbacks: [Object],
        logger: [Object],
        state: 'connected',
        reconnect: true,
        reconnectTries: 30,
        reconnectInterval: 1000,
        emitError: true,
        currentReconnectRetry: 30,
        ismaster: [Object],
        readPreferenceStrategies: undefined,
        authProviders: [Object],
        id: 1,
        tag: undefined,
        disconnectHandler: [Object],
        wireProtocolHandler: {},
        Cursor: [Object],
        bsonInstance: {},
        bson: {},
        pool: [Object],
        isMasterLatencyMS: 2,
        serverDetails: [Object] },
     name: [Getter],
     bson: [Getter],
     wireProtocolHandler: [Getter],
     id: [Getter] },
  cursorState: 
   { cursorId: null,
     cmd: 
      { find: 'epc.customers',
        limit: 0,
        skip: 0,
        query: {},
        slaveOk: true,
        readPreference: [Object] },
     documents: [],
     cursorIndex: 0,
     dead: false,
     killed: false,
     init: false,
     notified: false,
     limit: 0,
     skip: 0,
     batchSize: 1000,
     currentLimit: 0,
     transforms: undefined },
  callbacks: null,
  logger: { className: 'Cursor' },
  _readableState: 
   ReadableState {
     objectMode: true,
     highWaterMark: 16,
     buffer: [],
     length: 0,
     pipes: null,
     pipesCount: 0,
     flowing: null,
     ended: false,
     endEmitted: false,
     reading: false,
     sync: true,
     needReadable: false,
     emittedReadable: false,
     readableListening: false,
     defaultEncoding: 'utf8',
     ranOut: false,
     awaitDrain: 0,
     readingMore: false,
     decoder: null,
     encoding: null },
  readable: true,
  domain: null,
  _events: {},
  _eventsCount: 0,
  _maxListeners: undefined,
  s: 
   { numberOfRetries: 5,
     tailableRetryInterval: 500,
     currentNumberOfRetries: 5,
     state: 0,
     streamOptions: {},
     bson: {},
     ns: 'epc.customers',
     cmd: 
      { find: 'epc.customers',
        limit: 0,
        skip: 0,
        query: {},
        slaveOk: true,
        readPreference: [Object] },
     options: 
      { skip: 0,
        limit: 0,
        raw: undefined,
        hint: null,
        timeout: undefined,
        slaveOk: true,
        readPreference: [Object],
        db: [Object],
        promiseLibrary: [Function: Promise],
        disconnectHandler: [Object] },
     topology: 
      EventEmitter {
        domain: null,
        _events: [Object],
        _eventsCount: 5,
        _maxListeners: undefined,
        s: [Object],
        name: [Getter],
        bson: [Getter],
        wireProtocolHandler: [Getter],
        id: [Getter] },
     topologyOptions: 
      { socketOptions: {},
        auto_reconnect: true,
        host: 'localhost',
        port: 27017,
        cursorFactory: [Object],
        reconnect: true,
        emitError: true,
        size: 5,
        disconnectHandler: [Object],
        bson: {},
        messageHandler: [Function],
        wireProtocolHandler: {} },
     promiseLibrary: [Function: Promise],
     currentDoc: null },
晚上

var MongoClient = require('mongodb').MongoClient
  , assert = require('assert')
  , ObjectId = require('mongodb').ObjectId;

// Connection URL
var url = 'mongodb://localhost:27017/eProveCommons';
// Use connect method to connect to the Server

var findAll = function(db, callback) {
    var collection = db.collection('all');

    collection.find().toArray(function(err, docs){
        assert.equal(err, null);
        console.log(docs);
        callback(docs);
    })
}


MongoClient.connect(url, function(err, db) {
    assert.equal(null, err);
    console.log('You are connected correctly to the server.');
    findAll(db, function(docs){
        exports.getAll = function(){
            return docs;
        }
        db.close();
    });
});

这是一个游标对象

使用光标,您可以执行以下操作

var cursor = collection.find({});
cursor.each(...);
有关更多详细信息,请参阅此链接:


注意:如果您知道您有一个小的结果集,那么可以使用find({}).toArray()返回文档列表。

它返回的是光标,而不是文档。您需要通过将结果传递给的回调来操作该游标,或者将其转换为可读流。对我来说,问题在于它返回一个承诺。我对promises还是个新手,而且我一生都不能从mongodb路由json,因为这个方法返回一个promise。这就是为什么我希望我可以为我的数据解析游标对象,而不必麻烦地做出承诺。“解析”游标对象是一种非常糟糕的方法(忽略了许多原因)。我很困惑-你想解决哪个问题?从MongoDB获取数据或了解如何使用承诺。如果两者兼而有之,我建议你们分而治之:专注于从mongo获取数据,然后添加承诺。我在任何情况下都解决了这个问题。检查op。