查询中需要 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()) {
完全没问题。
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()) {
完全没问题。