2016-03-24 17 views
4

今日の私の深い好奇心の1つです。MongoDB 3.2 - findOneAndUpdateのupdateOneの使用例

私はfindOneAndUpdateがアトミックな操作を保証しているので、私はupdateOneはそうではないと思います。

しかし、余分な時間推論を費やす必要があり、アップデートが原子的であるかどうかをチェックするのに費やすことができる原子を避けるという大きな特典は本当にわかりません。

いくつかの洞察または使用例は素晴らしいでしょう!

+0

これについて何らかの調査を行っていれば、「反対の」質問をしたでしょう。メソッドの主な違いは、その「命名」で明確に定義されています。 1つは、変更されたドキュメントまたは元のドキュメントのいずれかを返すオプションがあり、もう1つは応答でドキュメントを「返す」ことを試みず、ただ「更新」します。実際、 'updateOne()'は '.update()'の短いセマンティクスです。 '.updateOne()'と '.updateMany()'の違いは、update文の '' multi "'パラメータを意味し、もう一つはそうでないということです。私はあなたにそこにあるものを解決するためにあなたを残すでしょう。 –

+0

「findOneAndUpdate」は、「文書を見つけて更新する」ように思われ、その説明は、その2つのことを1つにしてアトミックに行うことが重要なポイントのように聞こえます。 APIの命名の進化を経験したことのある人にとっては、それが返されていることに関して「発見」であり、「更新」ではないという考え方が明らかになるかもしれませんが、私はドクターのさまざまな戻り値のタイプを強調することは、新人の心の中でそれを明確にするのに役立つと思います。 –

+0

@BlakesSeven上記のすべてはノードドライバのドキュメントに適用されます。 –

答えて

4

私はfindOneAndUpdateがアトミックな操作を保証していることを認識していますので、 私はupdateOneはそうではないと考えています。

なぜあなたはそれを前提としていますか?

findOneAndUpdateは、updateOneのドキュメントを返しません(新しいドキュメントを作成した場合はidを返します)。私はそれが主な違いだと思う。従って、updateOneのユースケースは、ドキュメントが不要で、少しの時間と帯域幅を節約したい場合です。

+0

いいえ "変更された" _idを返しません。一貫して返されるのは 'WriteResult'だけです。これには一致した回数と更新された回数が表示されます。 '' upsert ''オプションを指定するだけで、" inserted id "が返されます。 –

+1

@BlakesSeven権利は、常にIDを返すわけではありませんが、文書を返さない(データを送信しない)点があります。 NB私は答えにその精度を加えました。 – Ilya

+0

@Ilya原子の部分がキーの違いだと私は考えていました。また、彼らはどちらも、私の意見では、ドキュメントを本当に難しく読んで直感を構築するだけの "約束"として戻り値を記述します。 –

関連する問題