я продолжаю свой предыдущий вопрос MongoDB GroupBy
После использования функции агрегата я получаю то, что хочу, теперь я хочу добавить некоторые параметры запроса в эту функцию агрегата, и запрос должен быть применен к результату агрегата.
например, для entity_id «123» существует 4 года
«2010», «2011», «2012», «2013»
после применения агрегатной функции по последнему вопросу получим «2013» с идентификатором сущности «123», что абсолютно правильно.
Теперь я хочу добавить дополнительный запрос, который должен выглядеть так: «entity_id» 123 «И год» 2013 «И» extra_query «.
Я попытался использовать $ match, но он принимал как «entity_id» 123 И дополнительный запрос.
у меня есть 2 коллекции в моем БД
коллекция 1.
{
"entity_id":123,
"added_by":"a",
},
{
"entity_id":321,
"added_by":"b",
},
и коллекция 2
{
"entity_id":123,
"year":"2014",
"profit_val":2000,
},
{
"entity_id":123,
"year":"2013",
"profit_val":1000,
},
{
"entity_id":123,
"year":"2012",
"profit_val":500,
},
{
"entity_id":123,
"year":"2011",
"profit_val":100000,
},
поэтому, когда я ищу «profit_val»> 10000, я получаю результат как «entity_id» = 123, НО этот результат неправильный, так как я хочу посмотреть это условие только с максимальным годом объекта.
если я хочу сгруппировать по максимальному году, что я уже сделал, ответ здесь и сейчас я хочу добавить запрос только к этому «сгруппированному» результату.
Я надеюсь, что это поможет вам понять, что я ищу.
Из вопроса я понял, что ты хочешь что-то подобное.
> db.collection2.aggregate([
{
$sort: {
"year": 1
}
},
{
$group: {
_id: "$entity_id",
year: {
$max: "$year"},
profit_val: {
$last: "$profit_val"}
}
},
{
$match: {
"profit_val": {
"$gt": 10000
}
}
}
])
Других решений пока нет …