MongoDB:cursor.toArray返回Promise {<pending>}

Max*_*huk 3 cursor mongodb node.js

情况

我写了一个查询:

var results = db.collection('diseases').find({
  'ttl.txt': {
    $regex: data,
    $options: 'i'
  }
}).toArray();
Run Code Online (Sandbox Code Playgroud)

问题

然后我打印results到控制台。

if (results.length > 0) {
  console.log(results);
}
Run Code Online (Sandbox Code Playgroud)

ToArray方法必须返回找到的文档的数组。但是此方法向我返回了以下字符串:Promise { <pending> }

如何返回找到的文档数组而不是此字符串?

聚苯乙烯

toArray:链接到文档

Den*_*nis 6

您会收到此错误,因为find()方法是异步的,这就是诺言未决的原因:它仍在获取。

db.collection('diseases').find({
  'ttl.txt': {
    $regex: data,
    $options: 'i'
  }
}).toArray().then((data) => {
    // Here you can do something with your data
    doSomethingWithTheResult(result)
})
Run Code Online (Sandbox Code Playgroud)

请注意,您的数据包含在回调中。有关诺言的更多信息,请检查Promise

根据您的节点版本(我认为是7.6+),您可以使用类似这样的东西

async function getResults() {
    return db.collection('diseases').find({
        'ttl.txt': {
        $regex: data,
        $options: 'i'
        }
    }).toArray();
}

const results = await getResults();
Run Code Online (Sandbox Code Playgroud)

因此,您的代码看起来像是同步代码。此处的关键是等待诺言结果的async / await命令。

希望能帮助到你!

  • `find()` 的返回类型定义为 Cursor:http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#find 而 `Cursor.toArray` 的返回类型是一个承诺:http://mongodb.github.io/node-mongodb-native/3.1/api/Cursor.html#toArray。是否可以这样做:`var result = await db.collection('diseases').find(query).toArray();`并将`async`关键字添加到封闭函数中? (2认同)