如何以编程方式等待写锁定完成?

时间:2016-03-14 17:47:26

标签: node.js mongodb

使用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没有任何参数或回调来处理处理,你会如何等待释放这个锁?

1 个答案:

答案 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();
        });
    });
});