如何以原子方式獲取最新的「rounds」記錄ObjectId並在插入到「存款」集合時使用它?MongoDB:對2個集合進行原子調用(查找+插入)
這個帖子回答說不能這樣做:Is there any way to atomically update two collections in MongoDB? 這是真的嗎?
在過程A中,我想自動查找最新的圓形標識符(rid)並將其插入到存款中。競爭條件是,在A發現擺脫之後,另一個進程B可能會插入回合,所以現在A有一個不是最新的擺脫,但是落後1。 A怎樣才能找到擺脫的方式+將這個擺脫到存款(對這兩個集合採取行動)原子上?
// GET ROUND ID (RID) OF LATEST
var rid;
db.rounds.find().limit(1).sort({$natural:-1}, function(err, latestInsertedRound){
rid = latestInsertedRound[0]._id;
print(rid, 'rid'); // if another process B inserts now, this rid is 1 behind
// INSERT INTO DEPOSITS
db.deposits.insert({uid:uid, iid:iid, rid:rid}, function(err, insertedDeposit){
print(insertedDeposit, 'insertedDeposit');
});
});
爲什麼你需要'最新'的ID如果你仍然有連接到保存的存款? –
因爲一輪結束後,存款應該進入最新一輪。無論如何,這將如何完成? – mylord