2

MongoDB コレクションを使用して FIFO ロジックを実装する必要があります。

  1. MongoDB コレクションから最初のドキュメントをポップします。
  2. ドキュメントを MongoDB コレクションにプッシュし、最後のドキュメントとして配置します。

コレクション内のドキュメントには、自動生成された _id (ObjectId) 以外のインデックスはありません。

コレクションから最初のドキュメントを findAndRemove して、プッシュおよびポップ操作がFIFOスタックとしてアトミックに実行されることを保証することは可能ですか?

ドキュメント内の配列をアトミックなプッシュおよびポップ操作で処理できることはわかっていますが、主な問題は、1 つのドキュメントの配列内にすべてのデータを格納すると、サイズが 16MB (MongoDB の最大許容サイズ) を超えることです。資料)

前もってありがとう、バレンティン

4

2 に答える 2

5

単一のマシンからスタックにアクセスしている場合は、 findAndRemove を使用してアクセスできます。

db.col.findAndModify({query:{}, sort:{i: -1}, remove:true})

これにより、削除された値が返され、リクエストごとにドキュメント自体がアトミックに削除されます。ここで、「i」は時間でソートされたフィールドです (_id は ObjectId の場合に機能します)。複数のインスタンスから FIFO スタック/コレクションを使用している場合は、「i」の値がすべてのインスタンスでアトミックに増加することを何らかの方法で確認する必要があります。そうでない場合は、コレクションが厳密ではなく FIFO 風であることに対処する必要があります。

于 2012-10-10T08:09:05.173 に答える
1

document _id はドキュメント作成日の値であるため、ドキュメントを並べ替えて最初/最後に作成されたドキュメントを取得できます。最後に作成されたドキュメントを取得するには、次のようにします。

db.collection.find().sort({ _id : -1 }).limit(1)

そして、コレクションにドキュメントを追加すると、コレクションの最後に追加されます。

于 2012-10-10T07:59:53.347 に答える