Flask-PyMongo如何将Cursor首个文档的nr值赋值给变量
获取Flask-PyMongo中排序后首个文档的nr字段值
我来帮你解决这个问题——在Flask-PyMongo里获取排序后第一个文档的nr字段其实很简单,咱们一步步拆解:
首先你要明白,prob.find().sort(...)返回的是PyMongo的Cursor对象,它是一个可迭代的结果集,不是直接的列表,所以不能直接用items[0]去取第一个元素。我们需要先拿到第一个文档,再提取其中的nr字段。
方法一:使用next()获取首个文档
Cursor对象支持用next()方法直接取出第一个元素,不过要注意处理集合为空的情况(避免抛出StopIteration异常):
from flask import Flask, jsonify import pymongo @app.route('/testaree') def testaree(): prob = mongo.db.prob # 按nr降序排序,得到Cursor对象 sorted_cursor = prob.find().sort("nr", pymongo.DESCENDING) try: # 获取第一个文档 first_document = next(sorted_cursor) # 提取nr字段赋值给变量 max_nr = first_document['nr'] # 这里可以根据需求使用max_nr做其他操作 return jsonify({ "max_nr": max_nr, "first_document": first_document }) except StopIteration: # 集合为空时的处理 return jsonify({"error": "No documents found in the 'prob' collection"}), 404
方法二:用find_one()更简洁
如果你的需求只是获取排序后的第一个文档,直接用find_one()会更高效,它不需要返回整个Cursor,直接返回单个文档:
from flask import Flask, jsonify import pymongo @app.route('/testaree') def testaree(): prob = mongo.db.prob # 直接按nr降序查询第一个文档 first_document = prob.find_one(sort=[("nr", pymongo.DESCENDING)]) if first_document: # 提取nr字段 max_nr = first_document['nr'] return jsonify({ "max_nr": max_nr, "first_document": first_document }) else: # 集合为空时的处理 return jsonify({"error": "No documents found in the 'prob' collection"}), 404
额外提醒
如果nr字段可能不存在于某些文档中,最好加上get()方法避免KeyError,比如max_nr = first_document.get('nr', None),这样即使文档里没有nr字段,也不会抛出异常。
内容的提问来源于stack exchange,提问作者Ax M
相关产品推荐
相关产品推荐

