Я ищу некоторые рекомендации о том, как наилучшим образом подойти к этому типу запросов в MongoDB.Mongodb Агрегация с будущими документами
У меня есть база покупок, каждая из которых имеет свойство course
, а также дату, в которую человек приобрел.
Что я хочу, это список покупок, которые произошли после того, как кто-то купил исходный продукт.
Так что - некоторые pesudo запросы здесь:
// first find everyone who signed up for course A
{ course: 'a' }
затем
/*
out of those people, filter for those who in the future signed up
for another course
*/
{
course: { $in: ['b','c','d']},
date: { $gt: $courseA.purchaseDate }
}
Является ли это возможно с агрегацией? Или я бы делал несколько вызовов БД для каждой начальной покупки, чтобы проверить, есть ли будущее?
Вот некоторые примеры того, что данные будут выглядеть для каждой покупки:
{ email: '[email protected]', course: 'a', purchaseDate: 10 },
{ email: '[email protected]', course: 'b', purchaseDate: 20 }, // match
{ email: '[email protected]', course: 'c', purchaseDate: 5 }, // not
{ email: '[email protected]', course: 'a', purchaseDate: 5 },
{ email: '[email protected]', course: 'c', purchaseDate: 6 }, // match
{ email: '[email protected]', course: 'b', purchaseDate: 10 }, // match
{ email: '[email protected]', course: 'd', purchaseDate: 1 }, // not
Можете ли вы опубликовать образец документа? – joao
Только что отправил пример - спасибо – wesbos
вместо того, чтобы подойти к проблеме, как вы описали, я предлагаю сделать ниже 1. группа, чтобы у вас был один документ на каждого пользователя и все приобретенные им курсы. 2. Отфильтровать всех пользователей, которые НЕ купили курс 'x' это не даст вам всех курсов * после * курса, но подойдет вам ближе – rrag