【发布时间】:2014-02-19 17:37:14
【问题描述】:
我在一个带有 ids (ReferenceField) 的模型中有一个 ListField,如果某个 id 在该列表中,我需要进行查询。 AFAIK 我有两个选择:
Model.objects.filter(refs__contains='59633cad9d4bc6543aab2f39')
或:
Model.objects.filter(refs__in=['59633cad9d4bc6543aab2f39'])
哪个对这个用例最有效?
模型如下:
class Model(mongoengine.Document):
refs = mongoengine.ListField(mongoengine.ReferenceField(SomeOtherModel))
从我在 mongoengine 文档http://docs.mongoengine.org/guide/querying.html#string-queries 中可以读到的内容来看,contains 实际上是一个字符串查询,但它在这里也能出人意料地工作。但我猜 __in 效率更高,因为它应该针对列表进行优化,还是我错了?
【问题讨论】:
标签: python mongodb mongoengine