6

私はいくつかの非常に単純なコードを持っています:

from mongoengine import *

class Comment(Document):
    id = IntField(primary_key=True)
    text = StringField()

class Message(Document):
    id = IntField(primary_key=True)
    comments = ListField(ReferenceField(Comment))

connect('test_db')

c1 = Comment(id=1)
c1.text = 'message_one'
c1.save()

c2 = Comment(id=2)
c2.text = 'message_two'
c2.save()

m = Message(id=1)
m.comments = [c1, c2]
m.save()

msg = Message.objects.get(id=1)
for comment in msg.comments:
    print comment.id, comment.text

私はそれが印刷されることを期待していました

1 メッセージ_one

2 メッセージ_ツー

しかし、私は持っています

1 メッセージ_one

1 メッセージ_one

mongodb 管理 UI を使用してデータベースを表示すると、すべて問題ないようです。

{ "_cls" : "メッセージ" , "_id" : 1 , "_types" : ["メッセージ"] ,

"コメント" : [ { "$ref" : "コメント" , "$id" : 1} , { "$ref" : "コメント" , "$id" : 2}]}

コード内で c1 と c2 を交換しようとしました (たとえば、m.comments = [c2, c1] を使用)。予期せず、適切な出力が得られました。

2 メッセージ_ツー

1 メッセージ_one

また、カスタム主キー「id」を使用しないようにしましたが、どちらの場合もすべて正常に機能しました。

私はこのバグに非常に混乱しています。mongoengine に問題があるか、正しい方法で使用していないようです。何かアイデアはありますか?

4

1 に答える 1

4

逆参照にバグがあり、これは 0.6.15 で修正されました - アップグレードしてください!

于 2012-07-20T08:18:20.077 に答える