按集合中的订单号检索 mongodb 文档

Retrieve mongodb document by order number in collection

我有一个 mongodb 集合,看起来像这样;

[
  {
    "Code": "018906",
    "X": "0.12",
  },
  {
    "Code": "018907",
    "X": "0.18",
  },
  {
    "Code": "018910",
    "X": "0.24",
  },
  {
    "Code": "018916",
    "X": "0.75",
  },
]

假设我想检索第 3 个文档的 Code 字段。我想使用像这样的 python 函数 retrieve_by_order(order_no=3, field='Code') 它将 return "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)