我有一个看起来像这样的mongodb集合;
[
{
"Code": "018906",
"X": "0.12",
},
{
"Code": "018907",
"X": "0.18",
},
{
"Code": "018910",
"X": "0.24",
},
{
"Code": "018916",
"X": "0.75",
},
]
假设我想检索第三个文档的Code
字段。我想使用类似retrieve_by_order(order_no=3, field='Code')
这样的python函数,它将返回"018910"
。 order_no
指向集合中的文档位置。
[Code
以升序排列。
我愿意使用任何python mongodb库。欢迎使用pymongo,orm之类的解决方案,例如mongoengine。
我正在使用python 3.7,mongodb v4.2
假设存储的数据顺序正确,使用pymongo的惰性解决方案将类似于:
from pymongo import MongoClient
client = MongoClient(<creds>)
db = client.database
coll = db.coll
def retrieve_by_order(order_no, field="Code"):
for i, post in enumerate(coll.find()):
if i + 1 == order_no:
return post[field]
一种更快的解决方案是使记录保留一个“ order_no”字段,您可以直接对其进行查询。
示例:
coll.find_one({"order_no": order_no})
您可以将order_no设置为可通过以下代码设置的递增索引:
result = db.collection.create_index([('order_no', pymongo.ASCENDING)], unique=True)