【问题标题】:Problem with countDocuments Mongoose: its not actually waiting for the callback function to executecountDocuments Mongoose 的问题:它实际上并没有等待回调函数执行
【发布时间】:2020-09-03 15:40:23
【问题描述】:

我遇到了 Mongoose 后端的问题。我想这是一个异步问题。有人可以解释一下 countDocuments 的工作原理吗?

    albumFields.features = [];
    for await (const feature of features) {
      await Artist.countDocuments({ _id: feature._id }, (err, count) => {
        if (count > 0) {
          albumFields.features.push({ _id: feature._id });
        }
        console.log('artist.count', albumFields.features);
      });
      console.log('features.forEach', albumFields.features);
    }
    console.log('!!!', albumFields.features);

我得到的输出是:

artist.count [ { _id: '5ec09f9c99339f3ad85973c0' } ]
features.forEach [ { _id: '5ec09f9c99339f3ad85973c0' } ]
features.forEach  [ { _id: '5ec09f9c99339f3ad85973c0' } ]
!!! [ { _id: '5ec09f9c99339f3ad85973c0' } ]
artist.count [ { _id: '5ec09f9c99339f3ad85973c0' },
  { _id: '5ec09fb199339f3ad85973c4' } ]

我期望的输出是:

artist.count [ { _id: '5ec09f9c99339f3ad85973c0' } ]
features.forEach [ { _id: '5ec09f9c99339f3ad85973c0' } ]
artist.count [ { _id: '5ec09f9c99339f3ad85973c0' },
  { _id: '5ec09fb199339f3ad85973c4' } ]
features.forEach [ { _id: '5ec09f9c99339f3ad85973c0' },
  { _id: '5ec09fb199339f3ad85973c4' } ]
!!! [ { _id: '5ec09f9c99339f3ad85973c0' },
  { _id: '5ec09fb199339f3ad85973c4' } ]

【问题讨论】:

    标签: javascript asynchronous mongoose


    【解决方案1】:

    所以问题是 countDocuments() 只有在没有回调函数的情况下才会返回一个承诺。在我们的例子中,我们创建了获取与过滤器匹配的文档数量的回调。

    我不确定为什么代码会以这种方式执行,也许有人可以解释,但我确实设法解决了问题。

        let arraytest = [];
        for (const feature of features) {
          await Artist.countDocuments({ _id: feature._id }).then((count) => {
            if (count > 0) {
              albumFields.features = [
                ...albumFields.features,
                { _id: feature._id },
              ];
            }
          });
        }
    

    对于遇到同样问题的其他人,mongoose 文档中有一个链接,很容易错过。

    https://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#countDocuments

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-04
      • 2018-11-04
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多