Python 为什么pymongo在插入一个操作后更改我的变量?

Python 为什么pymongo在插入一个操作后更改我的变量?,python,mongodb,pymongo,Python,Mongodb,Pymongo,我在为一个新类方法编写一些测试时遇到了这个问题 >>> doc = {'test': True} >>> collection.insert_one(doc) <pymongo.results.InsertOneResult object at 0x031C2D00> >>> doc {'test': True, '_id': ObjectId('5e7103a1b650bd01fac6c6ff')} >doc={'test':

我在为一个新类方法编写一些测试时遇到了这个问题

>>> doc = {'test': True}
>>> collection.insert_one(doc)
<pymongo.results.InsertOneResult object at 0x031C2D00>
>>> doc
{'test': True, '_id': ObjectId('5e7103a1b650bd01fac6c6ff')}
>doc={'test':True}
>>>收款。插入一张(单据)
>>>医生
{'test':True,'u id':ObjectId('5E7103A1B650BD01FAC6FF')}
为什么将键
\u id
添加到变量
doc
?有一种方法可以从以下方面避免这种行为:

插入一个(文档,绕过文档\u验证=False,会话=None)

(……)

参数:文档:要插入的文档。必须是可变的 映射类型。如果文档没有_id字段,则会显示一个 自动添加


该行为由MongoDB驱动程序规范定义。如果调用insert并且尚未填充_id字段,将自动生成一个。为了避免这种情况,请在插入之前确保_id有一个值。我理解为什么Mongo必须在数据库中包含
_id
字段,但为什么它还要添加python控制台中定义的我的
dict
变量?因为它是由python驱动程序在将查询发送到服务器之前添加到对象中的。明白了。谢谢这是来自文档的信息,你不是唯一一个提出这个问题的人。其中一个主要原因是mongo服务器会添加_id,但不会将其报告回pymongo。是的,但为什么它还会添加在python控制台中定义的my
dict
变量中?我理解为什么Mongo必须在数据库中包含
\u id
字段,但为什么
doc
也必须更改?您的dict将被理解为一个文档,因此Mongo将在您的文档中添加_id,以便您更容易在Mongo中找到您的文档,假设您有数百万个文档,您如何找到您的文档?如果不使用此_id