Python: Mongo 排序

Python: uMongo sort

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

class Job(Document):
    priority = IntField()

我正在使用:

jobs = Job.find()

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

jobs = Job.find().sort('priority', 1)
jobs = Job.find().order_by('priority')

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

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

谢谢!

我以前没有用过umongo,但经过检查,我发现find()方法实际上是returns一个umongo.frameworks.pymongo.WrappedCursor实例。调查 the code 在我看来,这只是一个包含一些好东西的 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

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})>

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})>

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

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