Python:uMongo 排序

ET-*_*-CS 1 python sorting mongodb umongo

我正在使用uMongo和 Python 3.0 我有这个模型:

class Job(Document):
    priority = IntField()
Run Code Online (Sandbox Code Playgroud)

我在用着:

jobs = Job.find()
Run Code Online (Sandbox Code Playgroud)

为了从 mongo 实例中获取所有作业,我正在尝试按优先级对它们进行排序..但不幸的是,我似乎找不到执行此操作的方法。我搜索了文档并用谷歌搜索了它,尝试了很多类似的事情

jobs = Job.find().sort('priority', 1)
jobs = Job.find().order_by('priority')
Run Code Online (Sandbox Code Playgroud)

以及我发现的许多其他与 pymongo 相关的解决方案,但它不适用于 uMongo。

但仍然卡住了..任何帮助将不胜感激!

谢谢!

SRC*_*SRC 5

我以前没有使用过umongo,但是经过检查,我发现find()方法实际上返回的是一个umongo.frameworks.pymongo.WrappedCursor实例。查看代码,在我看来,这只是一个 pymongo.cursor,其中包含一些好东西。于是,我做了下面的实验,结果成功了。请告诉我这是否有帮助。

1.> 我创建了一个名为marketing(为什么这个名字?我不知道:))的集合,它看起来像下面 营销集合

2.> 正如您所看到的,它不是按照优先级字段排序的。

3.> 然后我写了下面的代码

In [1]: from datetime import datetime

In [2]: from pymongo import MongoClient

In [3]: from umongo import Instance, Document, fields, validate

In [4]: db = MongoClient().test_db

In [5]: instance = Instance(db)

In [6]: @instance.register
   ...: class Marketing(Document):
   ...:     priority = fields.IntField()
   ...:     class Meta:
   ...:         collection = db.marketing
Run Code Online (Sandbox Code Playgroud)

4.>然后我尝试了正常的for循环(不排序)

    In [8]: for doc in Marketing.find():
   ...:     print(doc)
   ...:     
<object Document __main__.Marketing({'id': ObjectId('5a1bf2acc24bf00f20acb2a2'), 'priority': 1})>
<object Document __main__.Marketing({'id': ObjectId('5a1bf2d1c24bf00f20acb2af'), 'priority': 3})>
<object Document __main__.Marketing({'id': ObjectId('5a1bf2e0c24bf00f20acb2b8'), 'priority': 2})>
<object Document __main__.Marketing({'id': ObjectId('5a1bf2eec24bf00f20acb2ba'), 'priority': 5})>
<object Document __main__.Marketing({'id': ObjectId('5a1bf2f4c24bf00f20acb2bc'), 'priority': 4})>
Run Code Online (Sandbox Code Playgroud)

5.> 当然,文档返回的顺序与集合中存在的顺序相同。

6.> 最后,我更改了 for 循环来对文档进行排序。

    In [9]: import pymongo

    In [11]: for doc in Marketing.find().sort([("priority", pymongo.ASCENDING)]):
    ...:     print(doc)
    ...:     
    ...:     
<object Document __main__.Marketing({'id': ObjectId('5a1bf2acc24bf00f20acb2a2'), 'priority': 1})>
<object Document __main__.Marketing({'id': ObjectId('5a1bf2e0c24bf00f20acb2b8'), 'priority': 2})>
<object Document __main__.Marketing({'id': ObjectId('5a1bf2d1c24bf00f20acb2af'), 'priority': 3})>
<object Document __main__.Marketing({'id': ObjectId('5a1bf2f4c24bf00f20acb2bc'), 'priority': 4})>
<object Document __main__.Marketing({'id': ObjectId('5a1bf2eec24bf00f20acb2ba'), 'priority': 5})>
Run Code Online (Sandbox Code Playgroud)

7.> 如您所见,它们按排序顺序返回。

我不能 100% 确定这是否符合您的情况。但从提问来看,好像是这样。