MongoDB: cursor.toArray returns 承诺 { <pending> }
MongoDB: cursor.toArray returns Promise { <pending> }
情况
我写了一个查询:
var results = db.collection('diseases').find({
'ttl.txt': {
$regex: data,
$options: 'i'
}
}).toArray();
问题
然后我将 results
打印到控制台。
if (results.length > 0) {
console.log(results);
}
ToArray 方法必须 return 找到文件的数组。但是这个方法return给我这个字符串:Promise { <pending> }
.
问题
如何 return 找到的文档数组而不是这个字符串?
PS
给出错误是因为它是一个承诺
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);
});
您收到此错误是因为 find() 方法是异步的,这就是 promise 挂起的原因:它仍在获取。
db.collection('diseases').find({
'ttl.txt': {
$regex: data,
$options: 'i'
}
}).toArray().then((data) => {
// Here you can do something with your data
doSomethingWithTheResult(result)
})
请注意,您的数据在回调中。有关承诺的更多信息,请查看 Promise
根据您的节点版本(我相信是 7.6+),您可以使用类似这样的东西
async function getResults() {
return db.collection('diseases').find({
'ttl.txt': {
$regex: data,
$options: 'i'
}
}).toArray();
}
const results = await getResults();
所以你的代码看起来像同步代码。这里的关键是等待承诺结果的async/await命令。
希望对您有所帮助!
在toArray()
方法中你写了一个回调函数:
var results = db.collection('diseases').find({
'ttl.txt': {
$regex: data,
$options: 'i'
}
}).toArray(function(err, result) {
if (results.length > 0) {
console.log(results);
}
});
使用 async/await 的现代方法。
在这种情况下,我们希望在鸟类集合中获得匹配的鸟类颜色。
async function getBirdsByColor(color) {
try {
var birds = await db.collection('birds').find({
color: color
}).toArray()
if(!birds || !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)
}
}
情况
我写了一个查询:
var results = db.collection('diseases').find({
'ttl.txt': {
$regex: data,
$options: 'i'
}
}).toArray();
问题
然后我将 results
打印到控制台。
if (results.length > 0) {
console.log(results);
}
ToArray 方法必须 return 找到文件的数组。但是这个方法return给我这个字符串:Promise { <pending> }
.
问题
如何 return 找到的文档数组而不是这个字符串?
PS
给出错误是因为它是一个承诺
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);
});
您收到此错误是因为 find() 方法是异步的,这就是 promise 挂起的原因:它仍在获取。
db.collection('diseases').find({
'ttl.txt': {
$regex: data,
$options: 'i'
}
}).toArray().then((data) => {
// Here you can do something with your data
doSomethingWithTheResult(result)
})
请注意,您的数据在回调中。有关承诺的更多信息,请查看 Promise
根据您的节点版本(我相信是 7.6+),您可以使用类似这样的东西
async function getResults() {
return db.collection('diseases').find({
'ttl.txt': {
$regex: data,
$options: 'i'
}
}).toArray();
}
const results = await getResults();
所以你的代码看起来像同步代码。这里的关键是等待承诺结果的async/await命令。
希望对您有所帮助!
在toArray()
方法中你写了一个回调函数:
var results = db.collection('diseases').find({
'ttl.txt': {
$regex: data,
$options: 'i'
}
}).toArray(function(err, result) {
if (results.length > 0) {
console.log(results);
}
});
使用 async/await 的现代方法。 在这种情况下,我们希望在鸟类集合中获得匹配的鸟类颜色。
async function getBirdsByColor(color) {
try {
var birds = await db.collection('birds').find({
color: color
}).toArray()
if(!birds || !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)
}
}