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

问题描述 投票:0回答:1

我有一个看起来像这样的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

python python-3.x mongodb pymongo mongoengine
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.