Используя 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
не имеет никаких параметров или обратных вызовов для обработки обработки, как бы вы дождались выхода этой блокировки?
Вы серьезно? Я даже не пытался, потому что [docs] (https://docs.mongodb.org/manual/reference/method/db.collection.drop/) сказал: «не принимает аргументов и вызывает ошибку, если вызывается с любыми аргументами «. Разве они не считают обратный вызов аргументом? –
Вы просматриваете документы для удаления коллекции в оболочке, а не node.js. См. Ссылку в моем ответе для документов узла node.js. – JohnnyHK
О, это очень расстраивает ... –