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」の「db_field」を「i」に設定しても、新しいキー(boxfluxInt)が作成されます。

バグですか?または私は間違っていますか?

辞書キー('DICTIONARY_KEY')を使用すると、mongoスタイルのdbフィールドへの変換が不可能になると思います。

4

1 に答える 1

1

OK、これはバグのようです。報告するのに最適な場所はgithubです:http://github.com/mongoengine/mongoengine

これは、本番環境の既存のユーザーを壊してしまうため、0.7まで修正されません。そのため、修正の一環として移行に関するメモを作成する必要があります。

于 2012-05-25T15:20:11.290 に答える