从mongodb find()方法获取大量数据但没有我需要的数据

时间:2016-05-02 13:41:30

标签: node.js mongodb data-retrieval

我是node,express&的新手。 MongoDB的, 我需要从mongo集合中检索数据,但是当我执行db.collection('mycoll')。fine()方法时,它会放回大量数据,但不会返回我所需的数据,即colelction的记录。 这是我的服务器端逻辑:

var url = 'mongodb://localhost:27017/wdk';
    var resultArray = {};
    mongodb.connect(url, function (err, db) {
        var cursor = db.collection('projects').find({username:"new"});
            cursor.forEach(function (docs,err) {
               resultArray.push(docs);
            }, function () {
                db.close();
                res.render('index',{
                    items:resultArray,
                    name: profile_name,
                    email: profile_email
                });
            });
            console.log(cursor);

以下是它在控制台中返回的内容:

    Readable {
  pool: null,
  server: null,
  disconnectHandler:
   { s: { storedOps: [], storeOptions: [Object], topology: [Object] },
     length: [Getter] },
  bson: {},
  ns: 'wdk.projects',
  cmd:
   { find: 'wdk.projects',
     limit: 0,
     skip: 0,
     query: { pusername: 'extra' },
     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] },
     promiseLibrary: [Function: Promise],
     disconnectHandler: { s: [Object], length: [Getter] } },
  topology:
   EventEmitter {
     domain: null,
     _events:
      { reconnect: [Function],
        timeout: [Object],
        error: [Object],
        close: [Function],
        destroy: [Object],
        serverDescriptionChanged: [Function],
        serverHeartbeatStarted: [Function],
        serverHeartbeatSucceeded: [Function],
        serverHearbeatFailed: [Function],
        serverOpening: [Function],
        serverClosed: [Function],
        topologyOpening: [Function],
        topologyClosed: [Function],
        topologyDescriptionChanged: [Function] },
     _eventsCount: 14,
     _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: 3,
        topologyId: -1,
        tag: undefined,
        disconnectHandler: [Object],
        monitoring: false,
        haInterval: 10000,
        wireProtocolHandler: [Object],
        Cursor: [Object],
        bsonInstance: {},
        inquireServerStateTimeout: null,
        bson: {},
        pool: [Object],
        isMasterLatencyMS: 1,
        inTopology: false,
        serverDetails: [Object],
        serverDescription: null,
        topologyDescription: null },
     hashedName: '1309e35791f04f1f4fc35d5e683e81d350dd04f4',
     name: [Getter],
     bson: [Getter],
     wireProtocolHandler: [Getter],
     id: [Getter] },
  cursorState:
   { cursorId: null,
     cmd:
      { find: 'wdk.projects',
        limit: 0,
        skip: 0,
        query: [Object],
        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: 'wdk.projects',
     cmd:
      { find: 'wdk.projects',
        limit: 0,
        skip: 0,
        query: [Object],
        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: 14,
        _maxListeners: undefined,
        s: [Object],
        hashedName: '1309e35791f04f1f4fc35d5e683e81d350dd04f4',
        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],
   { find: 'wdk.projects',
     limit: 0,
     skip: 0,
     query: { pusername: 'extra' },
     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] },
     promiseLibrary: [Function: Promise],
     disconnectHandler: { s: [Object], length: [Getter] } },
  topology:
   EventEmitter {
     domain: null,
     _events:
      { reconnect: [Function],
        timeout: [Object],
        error: [Object],
        close: [Function],
        destroy: [Object],
        serverDescriptionChanged: [Function],
        serverHeartbeatStarted: [Function],
        serverHeartbeatSucceeded: [Function],
        serverHearbeatFailed: [Function],
        serverOpening: [Function],
        serverClosed: [Function],
        topologyOpening: [Function],
        topologyClosed: [Function],
        topologyDescriptionChanged: [Function] },
     _eventsCount: 14,
     _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: 3,
        topologyId: -1,
        tag: undefined,
        disconnectHandler: [Object],
        monitoring: false,
        haInterval: 10000,
        wireProtocolHandler: [Object],
        Cursor: [Object],
        bsonInstance: {},
        inquireServerStateTimeout: null,
        bson: {},
        pool: [Object],
        isMasterLatencyMS: 1,
        inTopology: false,
        serverDetails: [Object],
        serverDescription: null,
        topologyDescription: null },
     hashedName: '1309e35791f04f1f4fc35d5e683e81d350dd04f4',
     name: [Getter],
     bson: [Getter],
     wireProtocolHandler: [Getter],
     id: [Getter] },
  cursorState:
   { cursorId: null,
     cmd:
      { find: 'wdk.projects',
        limit: 0,
        skip: 0,
        query: [Object],
        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: 'wdk.projects',
     cmd:
      { find: 'wdk.projects',
        limit: 0,
        skip: 0,
        query: [Object],
        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: 14,
        _maxListeners: undefined,
        s: [Object],
        hashedName: '1309e35791f04f1f4fc35d5e683e81d350dd04f4',
        name: [Getter],
        bson: [Getter],
        wireProtocolHandler: [Getter],
        messageHandler: [Function],
        wireProtocolHandler: [Object] },
     promiseLibrary: [Function: Promise],
     currentDoc: null },
     ignoreUndefined: false,
     maxBsonSize: 16777216,
     checkKeys: false,
     batchSize: -1,
     tailable: false,
     slaveOk: false,
     oplogReplay: false,
     noCursorTimeout: false,
     awaitData: false,
     exhaust: false,
     partial: false,
     documentsReturnedIn: 'firstBatch' } }

这是我在mongo控制台上查询时得到的结果: enter image description here

1 个答案:

答案 0 :(得分:0)

您的console.log()正在记录cursor对象,而不是结果列表。为此,您需要在最终回调中记录resultArray(这也是检查错误的正确位置):

cursor.forEach(function(doc) {
  resultArray.push(doc);
}, function (err) {
  if (err) ... // handle error!
  console.log('results:', resultArray);
  db.close();
  res.render('index',{
    items : resultArray,
    name  : profile_name,
    email : profile_email
  });
});