我写了一个查询:
var results = db.collection('diseases').find({
'ttl.txt': {
$regex: data,
$options: 'i'
}
}).toArray();
然后我将results
打印到控制台。
if (results.length > 0) {
console.log(results);
}
ToArray方法必须返回找到的文档数组。但是这个方法会给我返回这个字符串:Promise { <pending> }
。
如何返回找到的文档数组而不是此字符串?
toArray:Link to the documentation
答案 0 :(得分:4)
您收到此错误是因为find()方法是异步的,这就是承诺未决的原因:它仍在提取。
var results = db.collection('diseases').find({
'ttl.txt': {
$regex: data,
$options: 'i'
}
}).then((data) => {
// Here you can do something with your data
result = data.toArray()
doSomethingWithTheResult(result)
})
请注意,您的数据包含在回调中。有关承诺的更多信息,请查看Promise
根据您的节点版本(我相信7.6+),您可以使用类似这样的内容
async function getResults() {
db.collection('diseases').find({
'ttl.txt': {
$regex: data,
$options: 'i'
}
})
}
var results = await getResults();
results = results.toArray()
所以你的代码看起来像一个同步代码。这里的关键是等待promise结果的async / await命令。
希望它有所帮助!
答案 1 :(得分:1)
在toArray()
方法中,您编写了一个回调函数:
var results = db.collection('diseases').find({
'ttl.txt': {
$regex: data,
$options: 'i'
}
}).toArray(function(err, result) {
if (results.length > 0) {
console.log(results);
}
});
答案 2 :(得分:0)
错误正在给出,因为它是一个承诺
var results = db.collection('diseases').find({
'ttl.txt': {
$regex: data,
$options: 'i'
}
}).lean().then(function (obj) {
if (!obj) {
return resolve('not find');
}
return resolve(obj);
}).catch(function (err) {
return reject(err);
});
答案 3 :(得分:0)
使用 async/await 的现代方法。 在这种情况下,我们希望在鸟类集合中获得匹配的鸟类颜色。
async function getBirdsByColor(color) {
try {
var birds = await db.collection('birds'.find({
color: color
}).toArray()
if(!birds.length) {
throw('No birds with color: ' + color)
}
console.log('Successfully found one or more birds:', birds)
} catch (e) {
console.log('Bird search failure', e)
}
}