2015-12-13 11 views
5

最初の更新のコールバックから新しい更新/削除の呼び出しを呼び出すことで、MongoDBの2つのドキュメントをアトミックに更新/削除することはできますか?以下のケースでは、私は、コレクションから第2の文書を削除したいのですが、最初の文書の更新が成功した場合のみ:ネストされたMongoDBコールでは、どのようにアトミック性を確保できますか?

db.collection.update(conditions1, {$set: set}, function (err,result){ 
    db.collection.remove(conditions2, function(err,doc_num){  
     db.close(); 
    )}; 
}); 

私は$隔離クエリ演算子を越えてくるんだけど、私が理解からドキュメントでは、この演算子は、最初のドキュメント更新のコールバックによって別のドキュメントの更新を実行した後、複数のドキュメントに影響を及ぼす単一のクエリに対して読み取り/書き込みロックを実行するために使用されます。私が試して達成したいことです。

答えて

0

いいえ、できません。 hereと記載されているように、トランザクション全体ではなく、単一のクエリでロックが取得されます。

thisを使用すると、原子性の問題を解決できます。

0

アミールが言ったように、それはできませんが、two phase commit patternに従うことでモンゴの行動を模倣することができます。このリンクは、ロールバックのような操作を実行する方法にもリンクしています。