У нас есть сложный запрос, который мы пытаемся решить (хорошо нам его сложный xD)
У нас есть коллекция документов, которые содержат общую информацию о свойстве.Каждое свойство имеет поле цены, которое содержит массив объектов, в которых мы храним любые изменения цены для свойства.Существует три типа объектов ценообразования:
- Продано: это окончательная цена, согласованная при продаже имущества
- В списке: Это начальная цена, когда имущество было выставлено на продажу.market
- Изменение: это изменение цены по сравнению с существующим листингом.
По сути, мы пытаемся получить выходные данные о свойствах, которые в настоящее время продаются, но имелиснижение цены.
Мы не уверены, как этого добиться.Мы полагаем, что нам нужно сравнить объекты с «типом», установленным на «изменить», и сравнить цену с объектом, который имеет тип «в списке», поскольку указанная цена является первоначальной объявленной ценой, поэтому любые технические снижения ниже указанныхсчитается снижение цены.
Однако, если у нас есть следующее:
- в списке: € 50 000 - 12/12/2018
- изменение: € 40 000 - 12/ 13/2018
- изменение: € 39 000 - 12/14/2018
В таком случае, как мы можем сказать, что изменение цены составляет € 1000?Стоит ли сравнивать индексы [2] и [3], а не сравнивать перечисленные элементы?
Мы пытались вести учет последней известной цены, но это создает проблемы, главным образом, потому что у нас хранится 400 миллионов + адресов.
let aggregate = AddressModel.aggregate ();aggregate.unwind ("_ lists");
// Listing status
let listingsMatch = {
"_listings.listing_status": "for_sale",
"_listings.pricing.type": "change"
};
aggregate.match(listingsMatch);
aggregate.group({
"_id": "$_id",
"full_address": { "$first": "$fullAddress" },
"pricing": { "$first": "$_listings.pricing" },
});
aggregate.sort({
"renewed_date": -1
});
Выходными данными должны быть только адреса, имеющие статус for_sale и имеющие снижение цены.