我正在实现搜索功能,即在 mongoDB 中查找文档。我想.skip(x)在.limit(x)结果上模拟分页结果,但是我可以获取文档总数(在跳过和限制之前)并立即获取过滤结果吗?
产生预期输出的代码:
db.Datas.find({ type: "Unknown" })
.then((result) => {
let count = result.length;
db.Datas.find({ type: "Unknown" })
.sort({ createdAt: -1 })
.skip((req.query.page - 1) * 10)
.limit(10)
.then((res) => {
res.json({ count: count, result: res });
});
})
.catch((err) => {});
Run Code Online (Sandbox Code Playgroud)
但查询两次有点烦人,而且在大型数据库中可能会很慢。我尝试了类似的方法find({}).then(x => { ... }).sort(...) ...,但不起作用,因为它只返回 Promise。
我怎样才能有效地做这些事情?或者只是获取整个文档并跳过,用 JS 方式限制(使用 .splice 等)会更快更高效?