查询中需要 Mongoose for/await/of 循环“排序”吗?

Mongoose for/await/of loop is `sort` required in Query?

Mongoose 的文档中有 following example 关于迭代 async/await:

// Works without using `cursor()`
for await (const doc of Model.find([{ $sort: { name: 1 } }])) {
  console.log(doc.name);
}

由于我是 MongoDB 的新手,我想了解是否需要 [{ $sort: { name: 1 } }] 才能使查询正常工作,或者这只是一个示例。

我的目标是迭代集合中的所有文档,所以我想下面的代码应该没问题:

// Works without using `cursor()`
for await (const doc of Model.find()) {
  console.log(doc.name);
}

是否正确?

在 Mongodb 4.2 及更早版本中,将对象数组传递给 find 将触发异常。所以如果你 运行:

Model.find([{ $sort: { name: 1 } }]).then(...)

您将获得:

ObjectParameterError: Parameter "filter" to find() must be an object

然而,在 MongoDB 4.4 中,[{ $sort: { name: 1 } }] 实际上可以传递给 find。但是,$sort 实际上并没有进入 find 参数,而是应该像这样使用 Model.find().sort({name: 1})

这让我相信您提供的 link 中的 [{ $sort: { name: 1 } }] 只是一个占位符,服务器没有任何用处。所以运行宁

for await (const doc of Model.find()) {

完全没问题。