根据文档,mongoengine也应支持带有多态模型的hint() - 参见: http://docs.mongoengine.org/guide/defining-documents.html
问题在于我无法找到使用它的方法,并且文档中没有专门针对具有多态模型的情况的示例。 例如,如果我有以下层次结构:
class SFile(DynamicDocument):
submission_id = StringField()
meta = {
'allow_inheritance': True,
'indexes' : [ {'fields' : ['submission_id']} ] # , 'cls' : False
}
class TXTFile(SFile):
name = StringField()
class ImageFile(SFile):
vv = StringField()
# And create some documents:
sf = SFile()
sf.submission_id = '000'
sf.save()
我已经显示了索引create:
indexes = SFile.objects._collection.index_information()
print [str(i) for i in indexes]
=> [' id ','_ cls_1_submission_id_1']
到目前为止一切顺利。现在,如果我尝试提示(),我会收到一个错误:
print SFile.objects(submission_id='000').hint([('submission_id', 1)])
=>错误:pymongo.errors.OperationFailure:数据库错误:错误提示
根据index_information()的结果,索引名称是_ cls_1_submission_id - 我想,但这会引发同样的错误...
如果模型不是多态的,这种方法很好......
有人可以帮助我吗?
答案 0 :(得分:0)
尝试:
SFile.objects(submission_id='000').hint([('_cls', 1), ('submission_id', 1)])
可继承模型默认情况下会向索引添加一个额外的字段_cls
- 您可以通过设置元中的cls
字段来关闭此字段。见http://docs.mongoengine.org/guide/defining-documents.html?highlight=_cls#indexes
答案 1 :(得分:0)
我遇到了类似的麻烦,我认为print [str(i) for i in indexes]
会让你失望。字典看起来像
'_id.course_instance_id_1__id.user_id_1__id.namespace_1': {
'key': [('_id.course_instance_id', 1), ('_id.user_id', 1), ('_id.namespace', 1)],
'v': 1,
'background': False,
'dropDups': False
},
并且它要传递到key
的{{1}}字段而不是字典键,例如,
hint()