Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
116 views
in Technique[技术] by (71.8m points)

python - Why does upsert a record using update_one raise ValueError?

I want to add a record to the collection if the key doesn't already exist. I understand [MongoDB][1] offers the upsertfor this so I did a

db.collection.update({"_id":"key1"},{"_id":"key1"},True) 

This seems to work.

However in the Pymongo documentation it says that update is deprecated and use to update_one().

But:

db.collection.update_one({"_id":"key1"},{"_id":"key1"},True)

Gives:

raise ValueError('update only works with $ operators')
ValueError: update only works with $ operators

I don't really understand why update_one is different and why I need to use a $ operator. Can anyone help?

question from:https://stackoverflow.com/questions/30605638/why-does-upsert-a-record-using-update-one-raise-valueerror

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This is because you didn't specify any update operator. For example to $set the id value use:

db.collection.update_one({"_id":"key1"}, {"$set": {"id":"key1"}}, upsert=True)

Note that in the Mongo shell, this will simply replace the document with the new document.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...