mongodb ,агрегация, два одинаковых $match . Зачем?
Опять вопросы по этому mongodb .Книгу листаю новую 2020 выпуска на русском но не важно - смысл в том что вряд ли смогу привести понятно в отрыве от контекста этого раздела и самого примера иначе кратко не получится.Ну а вдруг кто подскажет мало ли. Глава про агрегацию и вот такой запрос там
db.companies.aggregate([
{ $match: { "funding_rounds.investments.financial_org.permalink": "greylock" } },
{ $project: {
_id: 0,
name: 1,
founded_year: 1,
rounds: { $filter: {
input: "$funding_rounds",
as: "round",
cond: { $gte: ["$$round.raised_amount", 100000000 ] }
}
}
}
},
{ $match: { "rounds.investments.financial_org.permalink": "greylock" } },
]).pretty()
Я не врублюсь зачем тут два одинаковых $match ? Первый сделал свою работу - зачем второй ??
Ответы (1 шт):
Затем что второй не такой как первый. Они не одинаковые.
{$match: {"funding_rounds.investments.financial_org.permalink": "greylock"}}
{$match: { "rounds.investments.financial_org.permalink": "greylock" }}
Пример.
Есть коллекция, в которой данные по людям и животным. У тех и у других есть поля, по которым можно их сравнить, например по количеству ушей, глаз ... или по среде обитания (домашние, дикие).
Вот такие фильтры поиска:
$match : {"human.antropometria.eyes_numbers": 2}$match : {"animal.antropometria.eyes_numbers": 2}
Найдут разные результаты! Например вот такие:
$match : {"human.antropometria.eyes_numbers": 2} :
{
"_id" : ObjectId("5815f4e735ee883c37ac8b4d"),
"human": {
"name": "qq_qq",
"age": "18",
"antropometria": {
"hand_length": "95",
"belly_diameter": "120",
"body_length": "175",
"eyes_numbers": "2",
"know_mongo": "True"
}
}
}
$match : {"animal.antropometria.eyes_numbers": 2}
{
"_id" : ObjectId("5815f4e735ee883c37ac8b7с")
"animal": {
"nick": "Murzik",
"age": "2",
"antropometria": {
"paws_numbers": "4",
"eyes_numbers": "2",
"can_self_studiing": "",
"know_mongo": "False"
}
}
}
Хотя на первый взгляд вроде все очень одинаковое. В твоем случае funding_rounds и rounds - тоже поиск по разным полям документов.