Mongoengine - 使用多态模型和提示()时出现“错误提示”错误

时间:2014-02-07 16:05:37

标签: mongodb model mongoengine polymorphism hint

根据文档,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 - 我想,但这会引发同样的错误...

如果模型不是多态的,这种方法很好......

有人可以帮助我吗?

2 个答案:

答案 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()