javascript - 在 MongoDB 中使用异步/等待时,在应用游标方法之前获取文档总数?

标签 javascript node.js mongodb mongodb-query

如何在使用 .find() 之后和应用 .sort()、.skip() 和 .limit() 之前获取文档总数?

传递给 .find() 的对象最终会从查询参数中生成,因此每次计数的结果都会不同。我应该使用 promises 而不是 async/await 吗?

app.get('/', async (req, res) => {
  let pageSize = parseInt(req.query.limit) || 250;
  let page = parseInt(req.query.page) || 1;

  try {
    let products = await db.collection('Furniture')
      .find({})
      .sort({})
      .skip((page - 1) * pageSize)
      .limit(pageSize)
      .toArray();
    res.json({products});
  } catch (e) { console.log('Error sending products', e); }
});

应将计数属性添加到响应中发送的 json 中,其中包含符合 find() 参数的产品总数。

最佳答案

关于 find()sort()skip()limit() 的酷事> 是它们都返回一个 cursor。这意味着它们可以被链接起来,但这也意味着在任何步骤中您都可以将游标分配给一个变量并在其上运行不同的函数,并且在完成后仍然拥有游标。

    let cursor = await db.collection('Furniture').find({})
    /* you want to wrap the following two in try catch as well, probably */
    let count = await cursor.count(); // do something with count then...

    let products = await cursor.sort({})
        .skip((page - 1) * pageSize)
        .limit(pageSize)
        .toArray();

关于javascript - 在 MongoDB 中使用异步/等待时,在应用游标方法之前获取文档总数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54190175/

相关文章:

node.js - MongoDB聚合,nodejs用AND & OR生成动态查询

javascript - 有没有办法在模式中有条件地定义 'required' 键?

javascript - Passport - 无法读取属性 'isAuthenticated'

windows - npm cordova 警告引擎窗口

javascript - 基金会 4 : Orbit: Initialitation after page loading & Ajax: Reinitialization

javascript - WIll window.addEventListener ("load", function(), false);等待浏览器自动填充字段?

Javascript 正则表达式不断返回 false

mongodb - 如何安装特定版本的MongoDB?

c# - 从 Web 浏览器控件读取 Javascript 变量

Javascript 继承 - instanceof 不工作?