mongodb でドキュメントを作成し、すぐにアプリケーションで使用できるようにする必要があります。これを行う通常の方法は (Python コードで):
doc_id = collection.insert({'name':'mike', 'email':'mike@gmail.com'})
doc = collection.find_one({'_id':doc_id})
これには 2 つの問題があります。
- サーバーへの 2 つの要求
- アトミックではない
そこで、この操作を使用して、次のようなfind_and_modify
助けを借りて効果的に「作成して返す」ことを試みました。upserts
doc = collection.find_and_modify(
# so that no doc can be found
query= { '__no_field__':'__no_value__'},
# If the <update> argument contains only field and value pairs,
# and no $set or $unset, the method REPLACES the existing document
# with the document in the <update> argument,
# except for the _id field
document= {'name':'mike', 'email':'mike@gmail.com'},
# since the document does not exist, this will create it
upsert= True,
#this will return the updated (in our case, newly created) document
new= True
)
これは確かに期待どおりに機能します。私の質問は、これが「作成して返す」ことを達成する正しい方法であるかどうか、または私が見逃している落とし穴があるかどうかです。