nodejs从mongodb返回对象数组

时间:2018-07-18 14:34:10

标签: javascript node.js mongodb promise

我想返回一个对象数组,其中包含集合名称及其每个对象的文档计数,例如 [{col:col1,count:1},{col:col2,count:2}]

目前,我仅通过将查询解析为一个承诺,才为每个集合返回一个文档计数数组。

我的主要问题是从.map函数返回一个对象,因为它必须返回promises。

db.listCollections()
  .toArray()
  .then(collections => {
    let promises = collections.map(col => {

      // Cannot return {col,count} here :/
      return db.collection(col["name"]).countDocuments();
    });
    return Promise.all(promises);
  })
  .then(res => console.log(res));

2 个答案:

答案 0 :(得分:1)

或者,将async函数传递给collections.map(),您可以返回{ col, count }

db.listCollections()
  .toArray()
  .then(collections => {
    const promises = collections.map(async col => {
      return {
        col: col.name,
        count: await db.collection(col.name).countDocuments()
      };
    });
    return Promise.all(promises);
  })
  .then(res => { console.log(res); });

答案 1 :(得分:0)

修复

return Promise.all([
    db.collection(col["name"]).countDocuments(),
    Promise.resolve(col["name"])
]);