Как сделать параллельную и последовательную очередь заданий (FIFO) из коллекции MongoDB? [Дубликат]

1

Вот моя схема коллекции:

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?

Теги:
mongoose
mongodb-query

1 ответ

1

Используйте findAndModify() с сортировкой

Если вы получаете доступ к стеку с одной машины, вы можете сделать это с помощью findAndRemove:

Model.collection.findAndModify({query:{}, sort:{created: 1}, remove:true})

Вам нужно получить доступ к collection потому что mongoose не реализует

findAndModify, вы findOneAndUpdate но он не удаляет документы

Дополнительная информация:

Поддерживает ли Mongoose метод Mongodb 'findAndModify'?

  • 0
    Сортировка на самом деле поддерживается и методом .findOneAndRemove() mongoose. Так что вам не нужно копаться в базовом драйвере.
  • 0
    Я думаю, .findOneAndUpdate() является лучшим в моей ситуации (я обновил вопрос). Как насчет запроса следующего доступного документа в очереди?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню