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% 确定这是否符合您的情况。但是从问题来看,好像是。
我正在使用 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% 确定这是否符合您的情况。但是从问题来看,好像是。