Я пытаюсь запросить предварительно созданную MongoDB, которая хранит информацию о ревизиях для каждой записи Пример того, как выглядят данные, таков:
{
"_id": ObjectId("5cd48bad15447900012fae00"),
"sku": "abc123",
"_revision": 5
"_created": ISODate("2019-05-10T15:00:00.000Z"),
"provider": "MySupplier5"
}
В этом примере есть записи для одной и той же записи с:
- отличается
_id
- То же
sku
- То же
provider
_revision
установлен на 1, 2, 3 и 4 (по одному на документ)
- разные
_created
даты
Что я хочу выбрать:
Все документы с установленным поставщиком "MySupplier5", но только самая последняя редакция.
Я попытался прочитать документацию по Aggregate , но не смог получить то, что мне было нужно. Я чувствовал, что подход, который я использую, чтобы обойти это, исключительно неэффективен и надеялся, что кто-то может указать мне правильное направление.
Прямо сейчас я делаю это:
Получить все SKU:
db.products.distinct('sku', { provider: "MySupplier5" }, { _id: 0, sku: 1 })
Переберите все SKU и получите самую последнюю версию:
db.products.find({ sku: 'abc123' }).sort({ revision: -1 }).limit(1)
Это работает, но все более неэффективно.
Мне удалось запустить эти два запроса, используя Mongoid , и я уверен, что смогу перевести все, что указано, в эквивалент Ruby. Я просто не могу понять, как сказать «только дайте мне самую последнюю редакцию» в Монго.
Спасибо!