Вот моя схема коллекции:
var mongoose = require('mongoose');
var urlSchema = new mongoose.Schema({
url: String,
easeDate: { type: Date, index: 1},
created: { type: Date, default: Date.now }
});
Мне нужно выполнить действие обновления со старейшим документом (от easeDate), чтобы изменить дату его easeDate
на "теперь + некоторый тайм-аут" и получить затронутый документ. Возможно ли это в одном запросе?
В принципе, я хочу сделать что-то вроде очереди из коллекции ("старейшая" - следующая, вытащенная, т.е. первая в первой части). Удаление URL-адресов (документов в коллекции) осуществляется другими условиями. Я не хочу удалять из очереди, но заканчиваю его, обновляя easeDate
.
Наконец, я хочу взять доступный URL-адрес и установить для него таймаут, так что в следующий раз вернется следующий URL-адрес. Если это был последний url, тогда null
возвращается в следующий раз из-за таймаута.
И если я могу его обновить, как я могу запросить базу данных (mongoose), чтобы получить следующий url, где easeDate <Date.now()? Не могли бы вы привести пример в JavaScript?
Если вы получаете доступ к стеку с одной машины, вы можете сделать это с помощью findAndRemove:
Model.collection.findAndModify({query:{}, sort:{created: 1}, remove:true})
Вам нужно получить доступ к collection
потому что mongoose
не реализует
findAndModify
, вы findOneAndUpdate
но он не удаляет документы
Дополнительная информация:
.findOneAndRemove()
mongoose. Так что вам не нужно копаться в базовом драйвере..findOneAndUpdate()
является лучшим в моей ситуации (я обновил вопрос). Как насчет запроса следующего доступного документа в очереди?