0

MongoLab データベースの nodejs を介して新しいドキュメントを mongodb コレクションに保存する前に、model.count を使用して特定のフィールドをチェックし、エントリの重複を防ぎます。

MyModel.count({field1: criteria1, field2: criteria2}, function (err, count) {
  if (count == 0) {
    // Create new document and call .save()
  }
});

ただし、テスト中に、プロセスが終了した後、コレクション内に多くの重複 (テスト実行全体で数が一致しない) があることに気付きましたが、.count() チェックを行わなかった場合ほど多くはありません。

イベントがいくつかの ReadStreams の 1 つによって発行さMyModel.count()れるたびに繰り返し呼び出されるコールバックにステートメントが埋め込まれているため、コレクションへの急速な書き込みによって引き起こされる非同期の問題があると思われます。具体的には、 ofを返す'readable'2 つ以上の同一かつほぼ同時に呼び出しを行い、最終的にそれぞれ (同一の) ドキュメントを作成してコレクションに保存します。MyModel.countcount0

これはありそうですか?もしそうなら、タイムアウトを設定したり、同期パターンを使用したりせずに、ドキュメント書き込みの一意性を強制するにはどうすればよいですか?

4

1 に答える 1