I have some pretty simple code:
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
I've expected that it will print
1 message_one
2 message_two
but I've got
1 message_one
1 message_one
When I use any mongodb admin UI to view database everything seems to be ok:
{ "_cls" : "Message" , "_id" : 1 , "_types" : [ "Message"] ,
"comments" : [ { "$ref" : "comment" , "$id" : 1} , { "$ref" : "comment" , "$id" : 2}]}
I've tried to swap c1 and c2 in the code (for example use m.comments = [c2, c1]) and unexpectedly I've got the proper output:
2 message_two
1 message_one
Also I've tried to not use custom primary key "id" and in both cases everything worked properly.
I am very confused with this bug, it seems it's something wrong with mongoengine or I'm not using it in a right way. Please, any ideas?
There was a bug in dereferencing and this was fixed in 0.6.15 - please upgrade!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With