pymongo update_one 不根据 _id 更新

Rob*_*ers 4 python mongodb pymongo

我有这个更改集:

change_set = {'name': 'bso save job again', 'location': 'new york city', 'expires': '2020-04-04', 'created': '2020-03-05'}
Run Code Online (Sandbox Code Playgroud)

使用这个 id(我不是创建这个 id,它实际上是来自早期的保存):

id = '5e6107ddfef5aa3c2e3647b2'
Run Code Online (Sandbox Code Playgroud)

我正在尝试这样做:

result = dbjobs.update_one({'_id': id}, {'$set': change_set})
Run Code Online (Sandbox Code Playgroud)

我的 result.raw_result 是这样的:

{'n': 0, 'nModified': 0, 'ok': 1.0, 'updatedExisting': False}
Run Code Online (Sandbox Code Playgroud)

它没有抛出错误,我只是得到零零钱。难道我更新错了?

Tom*_*ert 5

TLDR:您的id类型应该是类型ObjectId而不是string

将其添加到您的代码中:

from bson.objectid import ObjectId
id = ObjectId('5e6107ddfef5aa3c2e3647b2')
Run Code Online (Sandbox Code Playgroud)

调试此类问题的简短说明:

从返回值来看,update_one具体该 ok字段返回1,表示操作成功。

再加上n=0Mongo 无法匹配任何文档的事实,因此问题出在操作的查询部分。