Node加上MongoDb构建和执行查询

时间:2018-02-12 21:05:01

标签: node.js mongodb

我正在使用nodejs和mongodb。我正在尝试构建一个查询并执行它,以便我可以通过此api返回一个json对象。当我执行以下操作时,我收到错误:
{{1}}

我应该如何设置不同的方式。

{{1}}

3 个答案:

答案 0 :(得分:0)

您应首先导入或创建GetTransactionList计划。 但在你的例子中,它不是一个方案,也没有实现方法exec。 它很简单。

答案 1 :(得分:0)

因为find()方法返回cursor,所以您可能希望在没有传递回调时附加光标的 toArray() 方法来返回Promise。

考虑按如下方式重写代码:

exports.findAll = function(req, res) {
    const query = GetTransactionList(parseInt(req.query.limit));
    query.then(res.json).catch(console.log);
    /* Above is equivalent to
    query.then(function(items) {
        res.json(items);
    }).catch(function(err) {
        console.log(err);
    });
    */
}

function GetTransactionList(limit){
    console.log("GetTransactionList entered with limit: ", limit);
    const cursor = db.collection('transtest').find({});
    return limit ? cursor.sort([['postdate', -1]]).limit(limit).toArray() : cursor.toArray();
}

答案 2 :(得分:0)

exec是在 mongoose 中定义的Mongoose的辅助方法,而不是在 mongodb 中,因此在mongodb中find()方法将光标返回到所选文档,您可以使用toArray()方法从游标返回文档数组。

简单示例

db.collection('restaurants').find().toArray(function(err, documents){

documents.forEach(function(doc){
        console.log(doc.name);
});

});

在你的情况下

query.toArray(function(err, items){
    //assert.equal(err, null);
   items.forEach(function(item){
       console.log(item);
   });
   res.json(items);
})

我希望这可以帮到你