我已经定义了类语句:
from mongoengine import *
class TickDataDocument(Document):
"""
"""
instrument_id = StringField(max_length=10, unique=True, required=True)
tick_data = ReferenceField(TickDocument)
class TickDocument(Document):
"""
"""
price = DecimalField(precision=2, required=True)
volume = LongField(required=True)
turnover = DecimalField(precision=2, required=True)
update_time = DateTimeField(unique=True, required=True)
我想在某段时间内查询update_time。
TickDataDocument.objects(instrument_id="fa1100").filter(tick_data__ update_time__lt =datetime.datetime(2013,9,3))
但我有错误:
mongoengine.errors.InvalidQueryError:无法在mongoDB中执行连接: tick_data__update_time
我怎么能有五个解决方案来查询mongoengine中的内部引用字段。
答案 0 :(得分:2)
正如评论中所建议的那样,我分两步执行此操作(两个查询):
tick_docs = list(TickDocument.object(update_time__lt)=datetime.datetime(2013,9,3))
TickDataDocument.objects(instrument_id="fa1100").filter(tick_data__in=tick_docs)
如果有更简单的解决方案,我也很感兴趣。
答案 1 :(得分:0)
您可以在 mongoengine 中使用 aggregate 方法并使用 $lookup 语法进行连接和查询,请注意使用聚合方法返回的是游标对象,而不是 QuerySet。
TickDataDocument.objects().aggregate([
{"$match":{"instrument_id":"fa1100"}},
{"$lookup":{
"from": TickDocument._get_collection_name(),
"localField": "tick_data",
"foreignField": "_id",
"as": "tick"
}},
{"$match":{
"tick.update_time":{"$lt":datetime.datetime(2013,9,3)}
}}
])