2012-07-17 112 views
3

我有一些非常简单的代码:mongoengine ListField(ReferenceField())和定制primary_key

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 message_one

2 message_two

但我有

1 message_one

1 message_one

当我使用任何MongoDB的管理界面,查看数据库中的一切似乎是确定:

{ “_cls”: “消息”, “_id”:1,“_types”:[“Message”],

“comments”:[{“$ ref”:“comment”,“$ id”:1},{“$ ref”:“评论“,”$ id“:2}]}

我试图交换c1和c2中的代码(例如使用m.comments = [C2,C1])和出乎意料地我已经得到正确的输出:

2 message_two

1 message_one

而且我试着不使用自定义主键“ID”,并在这两种情况下,一切工作正常。

我对这个bug非常困惑,看起来它与mongoengine有什么不对,或者我没有以正确的方式使用它。请有任何想法?

回答

3

解除引用中存在一个错误,并在0.6.15中修复 - 请升级!

相关问题