Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose:改进find()和count()查询 背景_Javascript_Node.js_Mongodb_Mongoose_Es6 Promise - Fatal编程技术网

Javascript Mongoose:改进find()和count()查询 背景

Javascript Mongoose:改进find()和count()查询 背景,javascript,node.js,mongodb,mongoose,es6-promise,Javascript,Node.js,Mongodb,Mongoose,Es6 Promise,我在Mongoose中有一个查询,找到一组对象,然后返回这些对象及其总数: var itemsPerPage = 4, pageNum = 1; Survey.find({}) .limit(itemsPerPage) .skip(itemsPerPage * pageNum) .then(docs => { if (docs.length === 0) console.log("There are no results m

我在Mongoose中有一个查询,找到一组对象,然后返回这些对象及其总数:

var itemsPerPage = 4, pageNum = 1;

Survey.find({})
    .limit(itemsPerPage)
    .skip(itemsPerPage * pageNum)
    .then(docs => {
        if (docs.length === 0)
            console.log("There are no results matching your query.");
        else
            DocModel.count({})
                .then(number => {
                    console.log(JSON.stringify({number, docs}));
                });
        })
        .catch(console.log);
为了实现这一目标,我采取了以下措施:

  • find
    使用参数查询
  • 使用
    limit
    skip
    从正确的页面获取结果
  • 如果
    单据
    不为空,则启动
    计数
    查询
  • 返回信息
  • 问题 这里的问题是,因为我需要在查询中分页,所以我必须向数据库发出两个单独的请求(
    find
    count
    ),这可能会非常繁重

    为了优化这一点,我想避免使用
    count
    查询,但我不知道如何进行

    另一个问题是嵌套承诺反模式,但这不是我现在要关注的问题

    问题: 我愿意接受任何关于改进此代码的建议

    您可以安装,这样更容易安装

    npm install mongoose-paginate
    
    之后

    /**
    * querying for `all` {} items in `MyModel`
    * paginating by second page, 10 items per page (10 results, page 2)
    **/
    
    MyModel.paginate({}, 2, 10, function(error, pageCount, paginatedResults) {
        if (error) {
            console.error(error);
        } else {
            console.log('Pages:', pageCount);
            console.log(paginatedResults);
        }
    }
    

    希望这对你有用。谢谢:-)

    对于嵌套的承诺,请这样做:使用它到目前为止,我很喜欢它。我确实对预测有问题,但我不认为这会是一个很大的问题,至少现在我找到了一个解决办法。谢谢