はい、これは仕様によるものです。 MongoDBは、結合またはトランザクションを明示的に提供しません。削除+保存はトランザクションの形式です。
ここには、実際には2つの複雑さの低いオプションがあり、どちらもfindAndModify
を含みます。 。
オプション#1:単一のコレクション
あなたの説明に基づいて、あなたは基本的にいくつかの追加機能を備えたキューを構築しています。単一のコレクションを活用する場合は、findAndModify
を使用します 処理中に各アイテムのステータスを更新します。
残念ながら、それはあなたがこれを失うことを意味します:...「入ってくる」コレクションはこの方法で非常に小さくそして速く保つことができます 。
オプション#2:2つのコレクション
もう1つのオプションは、基本的にfindAndModify
を利用した2フェーズコミットです。 。
この
アイテムがAで処理されると 削除のフラグを立てるフィールドを設定します。次に、そのアイテムを Bにコピーします 。 Bにコピーしたら その後、アイテムを Aから削除できます 。