首页 > 解决方案 > 无法从 mongodb 检索数据到 Node JS

问题描述

试图从 MongoDB 获取数据到 Node JS

var MongoClient = require('mongodb').MongoClient;

var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {

  if (err) throw err;

  var dbo = db.db("Mydb");

  console.log("Hello")

  dbo.collection("POC_DB").find({}, function(err, result) {

    if (err) throw err;

    console.log(result);

    db.close();

  });

});

如果我将其设为“result.name”,那么我将得到未定义的输出。我怀疑它可能是实际输出中给出的原始参数中的值。

实际光标输出

Cursor {
  _readableState:
   ReadableState {
     objectMode: true,
     highWaterMark: 16,
     buffer: BufferList { head: null, tail: null, length: 0 },
     length: 0,
     pipes: null,
     pipesCount: 0,
     flowing: null,
     ended: false,
     endEmitted: false,
     reading: false,
     sync: true,
     needReadable: false,
     emittedReadable: false,
     readableListening: false,
     resumeScheduled: false,
     emitClose: true,
     destroyed: false,
     defaultEncoding: 'utf8',
     awaitDrain: 0,
     readingMore: false,
     decoder: null,
     encoding: null },
  readable: true,
  _events: {},
  _eventsCount: 0,
  _maxListeners: undefined,
  operation:
   FindOperation {
     options:
      { skip: 0,
        limit: 0,
        raw: undefined,
        hint: null,
        timeout: undefined,
        slaveOk: true,
        readPreference: [ReadPreference],
        db: [Db],
        promiseLibrary: [Function: Promise] },
     ns: MongoDBNamespace { db: 'Mydb', collection: 'POC_DB' },
     cmd:
      { find: 'Mydb.POC_DB',
        limit: 0,
        skip: 0,
        query: {},
        raw: undefined,
        hint: null,
        timeout: undefined,
        slaveOk: true,
        readPreference: [ReadPreference] },
     readPreference: ReadPreference { mode: 'primary', tags: undefined },
     cursorState:
      { cursorId: null,
        cmd: [Object],
        documents: [],
        cursorIndex: 0,
        dead: false,
        killed: false,
        init: false,
        notified: false,
        limit: 0,
        skip: 0,
        batchSize: 1000,
        currentLimit: 0,
        transforms: undefined,
        raw: undefined,
        reconnect: true } },
  pool: null,
  server: null,
  disconnectHandler: undefined,
  bson: undefined,
  ns: 'Mydb.POC_DB',
  namespace: MongoDBNamespace { db: 'Mydb', collection: 'POC_DB' },
  cmd:
   { find: 'Mydb.POC_DB',
     limit: 0,
     skip: 0,
     query: {},
     raw: undefined,
     hint: null,
     timeout: undefined,
     slaveOk: true,
     readPreference: ReadPreference { mode: 'primary', tags: undefined } },
  options:
   { skip: 0,
     limit: 0,
     raw: undefined,
     hint: null,
     timeout: undefined,
     slaveOk: true,
     readPreference: ReadPreference { mode: 'primary', tags: undefined },
     db:
      Db {
        _events: {},
        _eventsCount: 0,
        _maxListeners: undefined,
        s: [Object],
        serverConfig: [Getter],
        bufferMaxEntries: [Getter],
        databaseName: [Getter] },
     promiseLibrary: [Function: Promise] },
  topology:
   Server {
     _events:
      { serverOpening: [Function],
        serverDescriptionChanged: [Function],
        serverHeartbeatStarted: [Function],
        serverHeartbeatSucceeded: [Function],
        serverHeartbeatFailed: [Function],
        serverClosed: [Function],
        topologyOpening: [Function],
        topologyClosed: [Function],
        topologyDescriptionChanged: [Function],
        commandStarted: [Function],
        commandSucceeded: [Function],
        commandFailed: [Function],
        joined: [Function],
        left: [Function],
        ping: [Function],
        ha: [Function],
        authenticated: [Function],
        error: [Array],
        timeout: [Array],
        close: [Array],
        parseError: [Array],
        open: [Array],
        fullsetup: [Array],
        all: [Array],
        reconnect: [Array] },
     _eventsCount: 25,
     _maxListeners: Infinity,
     clientInfo:
      { driver: [Object],
        os: [Object],
        platform: 'Node.js v10.13.0, LE' },
     s:
      { coreTopology: [Server],
        sCapabilities: [ServerCapabilities],
        clonedOptions: [Object],
        reconnect: true,
        emitError: true,
        poolSize: 5,
        storeOptions: [Object],
        store: [Store],
        host: 'localhost',
        port: 27017,
        options: [Object],
        sessionPool: [ServerSessionPool],
        sessions: Set {},
        promiseLibrary: [Function: Promise] } },
  cursorState:
   { cursorId: null,
     cmd:
      { find: 'Mydb.POC_DB',
        limit: 0,
        skip: 0,
        query: {},
        raw: undefined,
        hint: null,
        timeout: undefined,
        slaveOk: true,
        readPreference: [ReadPreference] },
     documents: [],
     cursorIndex: 0,
     dead: false,
     killed: false,
     init: false,
     notified: false,
     limit: 0,
     skip: 0,
     batchSize: 1000,
     currentLimit: 0,
     transforms: undefined,
     raw: undefined,
     reconnect: true },
  logger: Logger { className: 'Cursor' },
  s:
   { numberOfRetries: 5,
     tailableRetryInterval: 500,
     currentNumberOfRetries: 5,
     state: 0,
     promiseLibrary: [Function: Promise],
     currentDoc: null,
     explicitlyIgnoreSession: false } }

标签: node.jsmongodb

解决方案


.find() 将结果作为数组返回(如果存在),因此您必须像 result[0].name 一样获取数据。您还应该检查数组的长度,以免出现越界异常。


推荐阅读