Node.js Mongodb节点中的分页
在MongoDB中,是否有任何方法可以获取查找操作中的文档总数以及查询中的跳过和限制Node.js Mongodb节点中的分页,node.js,mongodb,pagination,Node.js,Mongodb,Pagination,在MongoDB中,是否有任何方法可以获取查找操作中的文档总数以及查询中的跳过和限制 MongoClient.connect(Config.dbURI, function (err, db) { if (!err) { console.log("We are connected"); console.log(uniqueId) db.collection(dbName).find({'uniqueId': uniqueId, 'isDel
MongoClient.connect(Config.dbURI, function (err, db) {
if (!err) {
console.log("We are connected");
console.log(uniqueId)
db.collection(dbName).find({'uniqueId': uniqueId, 'isDeleted': false})
.sort({modifiedDateISO: -1})
.limit(parseInt(limit))
.skip(parseInt(limit * page))
.toArray((errFindChat, dataFindChat) => {
console.log(errFindChat, dataFindChat);
});
});
如果使用。查找,则无法使用skip和limit进行筛选,并且只能在一个请求中使用总数 如果您只想在一个请求中检索文档、筛选和执行计数操作,则必须使用
var query={};//你的情况
变量选项={
选择“标题日期作者”,
排序:{date:-1},
填充:“作者”,
莱恩:是的,
抵销:20,
限额:10
};
分页(查询,选项)。然后(函数(结果){
// ...
});
mongoose分页很好我假设“uniqueId”不是主键
MongoClient.connect(Config.dbURI, function (err, db) {
if (!err) {
console.log("We are connected");
console.log(uniqueId)
db.collection("collname").aggregate(
[
{ "$match": { "uniqueId": uniqueId, 'isDeleted': false} },
{ "$count": "total" },
{ "$sort" : {"modifiedDateISO": -1 },
{ "$limit": parseInt(limit) },
{ "$skip" : parseInt(limit * page) }
]
).toArray((errFindChat, dataFindChat) => {
console.log(errFindChat, dataFindChat);
});
}
});
如果您使用的是mongoose,您可以使用“mongoose paginate”我使用的是mongodb driverNo,没有其他方法。应用两个查询。人们会说我们可以这样做。我知道这也可以通过map reduce完成,但查询速度将比使用2个查询慢10倍。嗨,我如何获得符合条件的文档总数?由于我需要在前端显示页码,因此您必须单独查询数据库以获取计数。这是否可以将计数与相同的查询名称一起获取:“MongoError”,消息:“Unrecognized pipeline stage name:\'$count\”,ok:0,errmsg:“Unrecognized pipeline stage name:\'$count\”,代码:16436}我想是因为版本。您可以尝试使用此方法代替$count stage
{“$group”:{“u id”:“$uniqueId”,“total”:{“$sum”:1}}}
@edam的解决方案正在运行,页码应该从0开始。
MongoClient.connect(Config.dbURI, function (err, db) {
if (!err) {
console.log("We are connected");
console.log(uniqueId)
db.collection("collname").aggregate(
[
{ "$match": { "uniqueId": uniqueId, 'isDeleted': false} },
{ "$count": "total" },
{ "$sort" : {"modifiedDateISO": -1 },
{ "$limit": parseInt(limit) },
{ "$skip" : parseInt(limit * page) }
]
).toArray((errFindChat, dataFindChat) => {
console.log(errFindChat, dataFindChat);
});
}
});