Reactjs Mongodb正确分页
以防任何人需要一个简单的方法来找到一个测试它的方法 获取全部元素然后使用“限制”和“跳过”的理想方法是什么。这仅用于获取分页材质UI元素的页数Reactjs Mongodb正确分页,reactjs,mongodb,aggregation-framework,Reactjs,Mongodb,Aggregation Framework,以防任何人需要一个简单的方法来找到一个测试它的方法 获取全部元素然后使用“限制”和“跳过”的理想方法是什么。这仅用于获取分页材质UI元素的页数 [ { "_id": "1", "message": [ { "_id": { "$oid": "609cbe47a45b594af4bc6b5a" }
[
{
"_id": "1",
"message": [
{
"_id": {
"$oid": "609cbe47a45b594af4bc6b5a"
},
"author": "Dr. Jameson",
"subject": "Lab Results Uploaded",
"content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sceleri...",
"timestamp": {
"$date": "2021-04-12T05:51:03.793Z"
},
"lastDateRead": {
"$date": "2021-05-13T05:51:03.793Z"
}
},
{
"_id": {
"$oid": "609cbe47a45b594af4bc6b52"
},
"author": "Dr. Jameson",
"subject": "Lab Results Uploaded2",
"content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sceleri...",
"timestamp": {
"$date": "2021-05-13T05:50:03.793Z"
},
"lastDateRead": {
"$date": "2021-05-13T05:51:03.793Z"
}
},
{
"_id": {
"$oid": "609cbe47a45b594af4bc6b5b"
},
"author": "Dr. Johnson",
"subject": "Lab Results",
"content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sceleri...",
"timestamp": {
"$date": "2021-05-13T05:51:03.793Z"
},
"lastDateRead": {
"$date": "2021-05-13T05:51:03.793Z"
}
}
]
},
{
"_id": "2",
"message": [
{
"_id": {
"$oid": "609cbe47a45b594af4bc6b5a"
},
"author": "Dr. Jameson",
"subject": "Lab Results Uploaded",
"content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sceleri...",
"timestamp": {
"$date": "2021-05-13T05:51:03.793Z"
},
"lastDateRead": {
"$date": "2021-05-13T05:51:03.793Z"
}
},
{
"_id": {
"$oid": "609cbe47a45b594af4bc6b5b"
},
"author": "Dr. Johnson",
"subject": "Lab Results",
"content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sceleri...",
"timestamp": {
"$date": "2021-05-13T05:51:03.793Z"
},
"lastDateRead": {
"$date": "2021-05-13T05:51:03.793Z"
}
}
]
}
]
查询:
db.collection.aggregate([
{
$match: {
_id: "1"
}
},
{
$unwind: "$message"
},
{
$match: {
$or: [
{
"message.author": {
$regex: "Dr. Jo"
}
},
{
"message.subject": {
$regex: "La"
}
}
]
}
},
{
$sort: {
"message.timestamp": -1
}
},
{
$skip: 0
},
{
$limit: 3
},
{
$group: {
_id: "$_id",
message: {
$push: "$message"
},
}
},
])
有两种方法,您可以根据自己的需求选择合适的方法 分页变量示例:
var skip = 0, limit = 3;
使用$slice
:
- 您可以使用数组的
和$slice
来获取总消息,而不是$size
和$skip
$limit
使用
$facet
,$skip
和$limit
:
用于分离计数和消息的结果$facet
获取邮件总数$count
并限制分页结果$skip
您只想对数组或根文档进行分页吗?我想在找到id=1后对内部数组进行分页。所以我可以传回数组的总量和限制量。总数是与筛选器匹配的所有内部值。
db.collection.aggregate([
{ $match: { _id: "1" } },
{ $unwind: "$message" },
{
$match: {
$or: [
{ "message.author": { $regex: "Dr. Jo" } },
{ "message.subject": { $regex: "La" } }
]
}
},
{ $sort: { "message.timestamp": -1 } },
{
$group: {
_id: "$_id",
message: { $push: "$message" }
}
},
{
$addFields: {
totalCount: { $size: "$message" },
message: { $slice: ["$message", skip, limit] }
}
}
])
db.collection.aggregate([
{ $match: { _id: "1" } },
{ $unwind: "$message" },
{
$match: {
$or: [
{ "message.author": { $regex: "Dr. Jo" } },
{ "message.subject": { $regex: "La" } }
]
}
},
{ $sort: { "message.timestamp": -1 } },
{
$facet: {
totalCount: [{ $count: "totalCount" }],
result: [
{ $skip: skip },
{ $limit: limit }
]
}
}
])