使用MongoDB,我有一个需要删除表的操作,然后再写入它。现在,我知道我可以使用更新(我现在,但它让我很好奇)。有没有办法(在NodeJS中)检查并等待锁被释放?
我知道您可以使用db.currentOp()
,但是将状态保存在锁定的数据库中并不是一个好主意 - 这似乎是浪费资源。
作为参考,这是我在遇到此问题时使用的过程:
db.collection("lastReadDate").drop();
db.collection(tableName).find().sort({"d": -1}).limit(1).toArray(function (err, arrayLastDate) {
var lastReadCollection = db.collection("lastReadDate");
lastReadCollection.insert({timestamp: arrayLastDate[0].d}, function (err, reply) {
db.close();
});
});
问题是,drop会在表上放置一个写锁定,所以当它插入这个新的时间戳时,它会因为锁定而跳过,并关闭数据库连接。
因此,由于drop
没有任何参数或回调来处理处理,你会如何等待释放这个锁?
答案 0 :(得分:4)
实际上,drop
会采用可用于此的回调参数。
db.collection("lastReadDate").drop(function(err) {
db.collection(tableName).find().sort({"d": -1}).limit(1).toArray(function (err, arrayLastDate) {
var lastReadCollection = db.collection("lastReadDate");
lastReadCollection.insert({timestamp: arrayLastDate[0].d}, function (err, reply) {
db.close();
});
});
});