2016-03-14 2 views
0

Используя 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 не имеет никаких параметров или обратных вызовов для обработки обработки, как бы вы дождались выхода этой блокировки?

ответ

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(); 
     }); 
    }); 
}); 
+0

Вы серьезно? Я даже не пытался, потому что [docs] (https://docs.mongodb.org/manual/reference/method/db.collection.drop/) сказал: «не принимает аргументов и вызывает ошибку, если вызывается с любыми аргументами «. Разве они не считают обратный вызов аргументом? –

+0

Вы просматриваете документы для удаления коллекции в оболочке, а не node.js. См. Ссылку в моем ответе для документов узла node.js. – JohnnyHK

+0

О, это очень расстраивает ... –

Смежные вопросы