0

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
)

これは確かに期待どおりに機能します。私の質問は、これが「作成して返す」ことを達成する正しい方法であるかどうか、または私が見逃している落とし穴があるかどうかです。

4

1 に答える 1

1

単純な古い通常の挿入呼び出しに欠けているものは何ですか?

_id がわからない場合は、最初に _id を自分で作成してドキュメントを挿入することができます。次に、それがどのように見えるかを正確に知っています。他のフィールドは、データベースに送信したものと変わりません。

挿入が成功するという保証が心配な場合は、戻りコードを確認し、十分な保証 (ディスクにフラッシュされたか、十分な数のノードに複製されたなど) を提供する書き込み懸念を設定することもできます。

于 2013-03-28T12:20:07.100 に答える