Reactjs Mongodb正确分页

Reactjs Mongodb正确分页,reactjs,mongodb,aggregation-framework,Reactjs,Mongodb,Aggregation Framework,以防任何人需要一个简单的方法来找到一个测试它的方法 获取全部元素然后使用“限制”和“跳过”的理想方法是什么。这仅用于获取分页材质UI元素的页数 [ { "_id": "1", "message": [ { "_id": { "$oid": "609cbe47a45b594af4bc6b5a" }

以防任何人需要一个简单的方法来找到一个测试它的方法

获取全部元素然后使用“限制”和“跳过”的理想方法是什么。这仅用于获取分页材质UI元素的页数

[
  {
    "_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 }
      ]
    }
  }
])