为什么使用 update_one 插入记录会引发 ValueError?
Why does upsert a record using update_one raise ValueError?
如果键不存在,我想向集合中添加一条记录。我知道 [MongoDB][1] 为此提供 upsert
所以我做了
db.collection.update({"_id":"key1"},{"_id":"key1"},True)
这似乎有效。
但是在 Pymongo documentation 中它说更新已被弃用并用于 update_one()
。
但是:
db.collection.update_one({"_id":"key1"},{"_id":"key1"},True)
给出:
raise ValueError('update only works with $ operators')
ValueError: update only works with $ operators
我不太明白为什么 update_one
不同以及为什么我需要使用 $
运算符。有人可以帮忙吗?
这是因为您没有指定任何 update operator。
例如对 $set
的 id
值使用:
db.collection.update_one({"_id":"key1"}, {"$set": {"id":"key1"}}, upsert=True)
请注意,在 Mongo shell 中,这只会用新文档替换文档。
使用 replace_one()
而不是 update_one()
。 replace_one()
的第三个参数也是upsert
。
db.collection.replace_one({"_id": "key1"}, {"_id": "key1"}, True)
我个人认为 update_one()
的这种实现与 MongoDB 客户端的行为不一致。 update_one()
中的upsert
选项其实是没有意义的。但是pyMongo的开发者可能只是想用这个来区分update_one()
和replace_one()
.
如果键不存在,我想向集合中添加一条记录。我知道 [MongoDB][1] 为此提供 upsert
所以我做了
db.collection.update({"_id":"key1"},{"_id":"key1"},True)
这似乎有效。
但是在 Pymongo documentation 中它说更新已被弃用并用于 update_one()
。
但是:
db.collection.update_one({"_id":"key1"},{"_id":"key1"},True)
给出:
raise ValueError('update only works with $ operators')
ValueError: update only works with $ operators
我不太明白为什么 update_one
不同以及为什么我需要使用 $
运算符。有人可以帮忙吗?
这是因为您没有指定任何 update operator。
例如对 $set
的 id
值使用:
db.collection.update_one({"_id":"key1"}, {"$set": {"id":"key1"}}, upsert=True)
请注意,在 Mongo shell 中,这只会用新文档替换文档。
使用 replace_one()
而不是 update_one()
。 replace_one()
的第三个参数也是upsert
。
db.collection.replace_one({"_id": "key1"}, {"_id": "key1"}, True)
我个人认为 update_one()
的这种实现与 MongoDB 客户端的行为不一致。 update_one()
中的upsert
选项其实是没有意义的。但是pyMongo的开发者可能只是想用这个来区分update_one()
和replace_one()
.