Как запросить только документы с последней отметкой времени из группы?

В коллекции MongoDB, к которой я обращаюсь, каждый документ представляет элемент в определенное время. При обновлении документа создается новый документ с тем же идентификатором элемента и новой отметкой времени. Все предметы имеют уникальные идентификаторы.

Для иллюстрации рассмотрим этот пример. Мы начинаем с одной ревизии элемента:

{
    _id: x,
    itemId: 123,
    createdOn: ISODate("2013-01-30T11:16:20.102Z"),
    field1: "foo",
    field2: "bar
}

После обновления у нас есть две ревизии элемента, с одинаковымиItemid и разные временные метки.

[{
  _id: x,
  itemId: 123,
  createdOn: ISODate("2013-01-30T11:16:20.102Z"),
  field1: "foo",
  field2: "bar"
},
{
  _id: y,
  itemId: 123,
  createdOn: ISODate("2014-02-09T14:26:20.102Z"),
  field1: "baz",
  field2: "fiz"
}]

Как я могу найти все элементы, которые в их последней редакции удовлетворяют определенному запросу?

Мой текущий (неправильный) подход заключается в том, чтобы сначала найти соответствующие документы, а затем отсортировать по отметке времени, сгруппировать их поItemidи вернуть значения из первого документа в группе:

ItemModel.aggregate({ $match: { field1: "foo"} }).sort({createdOn: -1}).group(
    {
        _id: '$itemId', // grouping key
        createdOn: {$first: '$createdOn'},
        field1: {$first: '$field1'},
        field2: {$first: '$field2'}
    }).exec(...);

Это неправильно, потому что это соответствует старым версиям предметов. Только последние версии предметов должны совпадать. В приведенном выше примере этот подход возвращает элемент «123», в то время как правильный результат - пустой набор результатов.

Ответы на вопрос(2)

Ваш ответ на вопрос