У меня есть коллекция с двумя полями, которые важны для этого вопроса: категория и дата (для простоты я просто буду использовать «вчера» и «сегодня»).
// Sample Data
{ category: 1, date: ISODate("yesterday") }
{ category: 1, date: ISODate("today") }
{ category: 2, date: ISODate("yesterday") }
{ category: 2, date: ISODate("today") }
{ category: 3, date: ISODate("yesterday") }
Теперь я модифицирую запрос, который будет сначала запрашивать категорию, затем сортироваться по убыванию даты и ограничиваться 1 результатом (предоставляя мне самую раннюю запись по дате для отдельной категории.
db.collection("things").find({ category: 1 }).sort({ date: -1 }).limit(1)
// Result
{ category: 1, date: ISODate("today") }
Это сработало отлично. Тем не менее, я хочу самую раннюю запись для КАЖДОЙ категории. Это означает, что я не могу использовать оператор предела (потому что я не знаю, сколько категорий существует в любой данный момент времени), и я не гарантирую, что дата будет записана для каждого дня в каждой категории.
// Expected Result
{ category: 1, date: ISODate("today") }
{ category: 2, date: ISODate("today") }
{ category: 3, date: ISODate("yesterday") }
Я играл отчетливо, но безуспешно.
Как я могу получить запись с самой ранней датой для каждой категории в одном запросе?