假设我有这样的人物收藏:
{
{'_id': 1, 'name': 'Tom', 'age': 22},
{'_id': 2, 'name': 'Joe', 'age': 30}
}
代码1:
p = db.people.find_one({'_id': 1})
db.people.update(p, {'$inc': {'age': 1}})
代码2:
db.people.update({'_id': 1}, {'$inc': {'age': 1}})
我发现pymongo中的代码1和代码2是不同的。 但我不知道区别。有人能告诉我吗?
编辑:
我明白了。
pymongo中的Json文档是乱序的。因此,p = db.people.find_one({'_id': 1})
可能无法返回与“_id”字段值为1的文档完全相同的文档。db.people.update(p, {'$inc': {'age': 1}})
可能找不到满足查询p的任何文档。
答案 0 :(得分:1)
如果省略详细信息代码1 执行2次查询,而代码1 执行1次查询
1. client mongodb 2. client mongodb
find_one update
-------------> ------------->
document
<-------------
update
------------->
答案 1 :(得分:1)
您的code 1
示例使用_id
1
检索完整文档,然后使用完整文档(保存在变量p
中)作为搜索条件进行更新。这里的副作用是,如果在执行find_one()
和update()
之间存储在数据库中的文档中的任何字段已更改,则您的更新将找不到该文档。
所以这相当于:
db.people.update({'_id': 1, 'name': 'Tom', 'age': 22}, {'$inc': {'age': 1}})
您的code 2
示例正在使用_id
为1
的搜索条件执行更新。只要文档存在,此更新将始终成功。