【问题标题】:How do I paginate results from a MongoDB subdocument using a GET request?如何使用 GET 请求对 MongoDB 子文档的结果进行分页?
【发布时间】:2022-12-20 03:12:00
【问题描述】:

我有一个 MongoDB 数据库,用于存储有关企业的 JSON 数据。每个企业的评论都以集合中的子文档的形式出现。我对每个企业都有 10 条以上的评论,并且我想使用 GET 请求对结果进行分页,这样我在一个页面上只能查看 10 条评论。

可以在下面找到 MongoDB 数据结构的示例;

[ 
  {  
    "_id": "1",
    "name": "businessName1",
    "reviews": [
      {
        "_id": "1",
        "comment": "comment1",
      },
      {
        "_id": "2",
        "comment": "comment1",
      },
     ...
    ]     
  } 
]

为了从我的 MongoDB 数据库中检索 JSON 数据,我有一个带有 API 端点的 python 文件,用于获取特定业务的评论。代码可以在下面找到;

    @app.route("/api/v1.0/businesses/<string:id>/reviews", methods=["GET"])
    def fetch_all_reviews(id):
    
        data_to_return = []
        business = businesses.find_one( \
                { "_id" : ObjectId(id) }, \   
                { "reviews" : 1, "_id" : 0 } ) # Gets all reviews for specific business. 
    
        for review in business["reviews"]:
            review["_id"] = str(review["_id"])
            data_to_return.append(review)      # Adds reviews to a list to display them. 
    
        return make_response( jsonify( data_to_return ), 200 ) 

从上面的代码可以看出,我有一个找一个()查找传入的 id 参数关联到的特定业务的函数。在这里我还声明我想获得该特定业务的所有评论。

我了解 Python 报价。跳过。限制指定可以返回多少结果的方法,但我不确定这些方法是否与我的 find_one 方法兼容。这是真的?

我有生成页码和大小的代码,我只需要知道放在哪里page_start页面大小这样我就可以对审核结果进行分页。

    page_num, page_size = 1, 10
    if request.args.get('pn'):
        page_num = int(request.args.get('pn'))
    if request.args.get('ps'):
        page_size = int(request.args.get('ps'))
    page_start = (page_size * (page_num - 1))

【问题讨论】:

    标签: python json mongodb get subdocument


    【解决方案1】:

    使用跳过和限制方法 使用查找和限制方法 使用切片分页 使用排序方法分页

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 2014-05-10
      • 2011-01-17
      • 2023-04-01
      • 2014-12-14
      相关资源
      最近更新 更多