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。
但仍然卡住了..任何帮助将不胜感激!
谢谢!
我以前没有使用过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% 确定这是否符合您的情况。但从提问来看,好像是这样。
| 归档时间: |
|
| 查看次数: |
657 次 |
| 最近记录: |