首页 > 解决方案 > MongoDB 在 NodeJS 上找到返回对象的元素

问题描述

我正在使用,MongoClient似乎每当我尝试通过查询查找时,我都会得到一个对象作为回报,但它在 mongo 终端中工作得非常好。此数据库初始化用于输入数据。

MongoDB终端

mongo
use player-db
db.players.find({"id":"1"})

结果: { "_id" : ObjectId("5f3ca631950b2f4b1f157e27"), "id" : "1", "name" : "test" }

现在在server.js

const url = '{ommited}'
const dbName = 'player-db'
let db;

MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, (err, client) => {

    if (err) return console.log(err)

    db = client.db(dbName)
    console.log(`Connected to Database: \n ${url}/${dbName}`)
})

/** Function that isn't working **/
const GetOne = (collection, id) => {
    let test = db.collection("players").find({"id" : "1"});
    console.log(test);
}

预期输出:
{ "_id" : ObjectId("5f3ca631950b2f4b1f157e27"), "id" : "1", "name" : "test" }

实际输出:

Cursor {
  _readableState: ReadableState {
    objectMode: true,
    highWaterMark: 16,
    buffer: BufferList { head: null, tail: null, length: 0 },
    length: 0,
    pipes: [],
    flowing: null,
    ended: false,
    endEmitted: false,
    reading: false,
    sync: true,
    needReadable: false,
    emittedReadable: false,
    readableListening: false,
    resumeScheduled: false,
    errorEmitted: false,
    emitClose: true,
    autoDestroy: true,
    destroyed: false,
    errored: false,
    closed: false,
    closeEmitted: false,
    defaultEncoding: 'utf8',
    awaitDrainWriters: null,
    multiAwaitDrain: false,
    readingMore: false,
    decoder: null,
    encoding: null,
    [Symbol(kPaused)]: null
    ........................... etc.

标签: node.jsmongodb

解决方案


您当前正在获取并记录cursor.

    let test = db.collection("players").find({"id" : "1"}).toArray(function(err, docs) {
       console.log(docs)
    });

应该显示您的文档。toArray将光标“转换”为找到的文档数组。它接受一个回调函数,它将在完成时执行。你也可以承诺或异步/等待await db.collection...


推荐阅读