Written by razrlele
00:15 April 6, 2016
今天发现了MongoDB中一个很奇怪的设计(或者说是坑。。。)
我在向MongoDB中插入一个对象的时候,不光数据库中新建的Document
会自动生成一个Object ID
,这个Object ID
还会自动插入到原对象里面去,如下所示:
1 2 3 4 5 |
>>> m={"a":1,"b":2} >>> db.test.insert(m) ObjectId('5703e3173e54b308173119be') >>> m {'a': 1, 'b': 2, '_id': ObjectId('5703e3173e54b308173119be')} |
这么一来的话,如果我想基于已经插入的对象修改然后再次插入的话就会报E11000 duplicate key error
,实在是想不清楚这么设计的好处在哪里。。。
如果需要在已经插入的对象的基础上修改然后再次插入为一个新的Document,那么最好是插入之前删掉对象中的_id
key,或者在Python中使用copy()
函数复制插入:
1 2 |
import copy db.test.insert( copy.copy(m) ) |