对包含 ReferenceField 的 ListField 进行排序(Mongoengine)
Sort a ListField containing ReferenceField (Mongoengine)
我有两个类声明如下:
from mongoengine import Document, fields, DynamicDocument
class Booking(DynamicDocument):
booking_id=fields.StringField(required=True)
pickup_timestamp=fields.DateTimeField()
class Assignment(Document):
created_timestamp=fields.DateTimeField(default=datetime.datetime.utcnow)
pickup_time=fields.DateTimeField()
bookings=fields.ListField(fields.ReferenceField(Booking))
我的应用程序允许用户通过从 UI 上的列表中选择 Booking 对象,将 Bookings 合并到一个 Assignment 对象下。
创建分配对象时,我自动将取件时间设置为预订 pickup_timestamp 中的最小值,就像这样 -
assignment.pickup_time = min([booking.pickup_timestamp for booking in assignment.bookings])
但是我还需要根据最早的Booking对象中的其他字段在assignment对象上设置其他属性。
我的问题 - 有没有办法通过引用对象上的字段对包含 ReferenceFields 的 ListField 进行排序?
我确实找到了 答案,但是它没有讨论 ListField 中的 ReferenceFields。也尝试将字段类型设置为 SortedListField,但我无法弄清楚如何指定要排序的键。
用-
解决
assignment.bookings=sorted(assignment.bookings, key=lambda k: k.pickup_timestamp)
这与 this 答案几乎相同。我不知道 MongoEngine ListField 在这方面的行为与字典完全一样!
如果有更多 efficient/better 方法可以做到这一点,我将非常想知道!
我有两个类声明如下:
from mongoengine import Document, fields, DynamicDocument
class Booking(DynamicDocument):
booking_id=fields.StringField(required=True)
pickup_timestamp=fields.DateTimeField()
class Assignment(Document):
created_timestamp=fields.DateTimeField(default=datetime.datetime.utcnow)
pickup_time=fields.DateTimeField()
bookings=fields.ListField(fields.ReferenceField(Booking))
我的应用程序允许用户通过从 UI 上的列表中选择 Booking 对象,将 Bookings 合并到一个 Assignment 对象下。 创建分配对象时,我自动将取件时间设置为预订 pickup_timestamp 中的最小值,就像这样 -
assignment.pickup_time = min([booking.pickup_timestamp for booking in assignment.bookings])
但是我还需要根据最早的Booking对象中的其他字段在assignment对象上设置其他属性。 我的问题 - 有没有办法通过引用对象上的字段对包含 ReferenceFields 的 ListField 进行排序?
我确实找到了
用-
解决assignment.bookings=sorted(assignment.bookings, key=lambda k: k.pickup_timestamp)
这与 this 答案几乎相同。我不知道 MongoEngine ListField 在这方面的行为与字典完全一样! 如果有更多 efficient/better 方法可以做到这一点,我将非常想知道!