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

时间:2017-07-19 18:21:53

标签: node.js mongodb cursor

情况

我写了一个查询:

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

问题

然后我将results打印到控制台。

if (results.length > 0) {
  console.log(results);
}

ToArray方法必须返回找到的文档数组。但是这个方法会给我返回这个字符串:Promise { <pending> }

问题

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

PS

toArray:Link to the documentation

4 个答案:

答案 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)
    }
}