0

如果您尝试此代码..您可以看到我遇到的问题..

class Embedded(EmbeddedDocument):
    boxfluxInt = IntField(default=0, db_field='i')
    meta = {'allow_inheritance': False}
class Test(Document):
    boxflux = MapField(field=EmbeddedDocumentField(Embedded), db_field='x')
    meta = {'collection': 'test',
                   'allow_inheritance': False}
Test.drop_collection()

newTestDoc = Test()
newTestDoc.boxflux['DICTIONARY_KEY'] = Embedded(boxfluxInt=1)
newTestDoc.save()
Test.objects.update_one(inc__boxflux__DICTIONARY_KEY__boxfluxInt=1)

Mongodb中的结果就像..

> db.test.findOne()
{
    "_id" : ObjectId("4fbdbbc8c450190a50000001"),
    "x" : {
            "DICTIONARY_KEY" : {
                    "boxfluxInt" : 1,
                    "i" : 1
            }
    }
}
>

如您所见,我打算将 'x.DICTIONARY_KEY.i' 增加 1,但结果是创建了一个新密钥 (boxfluxInt),即使我将 'boxfluxInt' 的 db_field 设置为 'i'

是虫子吗?还是我错了?

我认为字典键('DICTIONARY_KEY')使转换为 mongo 风格的数据库字段变得不可能..如果我是正确的..

4

1 回答 1

1

好的,这看起来像一个错误,报告它们的最佳位置是 github:http: //github.com/mongoengine/mongoengine

这要到 0.7 才会得到解决,因为它会破坏生产中的现有用户。因此,我将不得不编写迁移说明作为修复的一部分。

于 2012-05-25T15:20:11.290 回答