EstimatedDocumentCount()返回一个对象而不是数字

时间:2019-10-28 09:11:09

标签: javascript node.js mongodb express mongoose

每当用户检索我的Web应用程序的主页时,我都试图显示MongoDB数据库中的文档数。下图显示了我如何实现此目的:https://liveuml.com/view/5db6af5e663178088afee61e

这是路由器的相关代码段

app.route('/')
    .get(
        (req, res, next) => {
            res.locals.countOfWords = countAllWords();
            next();
        },
        (req, res, next) => {
            renderIndex(req, res);
        }
    );

以及控制器的相关代码段

function countAllWords() {
    myModel.estimatedDocumentCount({}, (err, result) => {
        return result; // returns an object instead of an integer
    });
}

function renderIndex(req, res) {
    res.render('index', {
        'countOfWords' : res.locals.countOfWords
    });
}

但是,控制器返回的result是查询对象,而不是整数。因此,我在网页上看到的是There are [object Object] documents in your database,而不是There are 12 documents in your database之类的东西。

是什么让我更困惑:当我用return result替换console.log(result)语句时,我在控制台中看到了预期的数字。

function countAllWords() {
    myModel.estimatedDocumentCount({}, (err, result) => {
        console.log(result); // displays the number as expected
    });
}

我的问题是,如何确保将数字而不是对象传递回路由器,以便它可以显示在网页上?

我正在使用最新版本的NodeJS,ExpressJS和Mongoose。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:-1)

在猫鼬中仅使用async await和count():

async countAllWords()=>{
    let countOfmymodel = await userModel.count({})
}