Я пытаюсь выполнить сопоставление после проекта в агрегированном запросе.
Я добавил запрос на сопоставление после запроса проекта на конвейере.
Совпадение на полях без поиска работает, но сопоставление выполняетсяне работает с полями поиска.
Это работает:
aggregate_query = [
{"$lookup": {
"from": "users_db",
"as": "customers",
"localField": "user_id",
"foreignField": "_id"
}},
{"$unwind": {
"path": "$customers",
"preserveNullAndEmptyArrays": True,
}},
{"$lookup": {
"from": "accounts_db",
"as": "accounts",
"localField": "account_id",
"foreignField": "_id"
}},
{"$unwind": "$accounts"},
{"$project": {
"display_username": "$customers.username",
"display_account_username": "$accounts.username",
"display_action": 1,
"timezone": "$customers.timezone",
"date": 1,
"user_id": 1,
"target_id": 1,
"target_id2": 1,
"source_ip": 1
}},
{'$match':{'$and':[{'source_ip':{'$regex':'127.0.0.1', '$options':'i'}}]}}
]
Это не работает (при наличии соответствующих документов возвращается пустое):
aggregate_query = [
{"$lookup": {
"from": "users_db",
"as": "customers",
"localField": "user_id",
"foreignField": "_id"
}},
{"$unwind": {
"path": "$customers",
"preserveNullAndEmptyArrays": True,
}},
{"$lookup": {
"from": "accounts_db",
"as": "accounts",
"localField": "account_id",
"foreignField": "_id"
}},
{"$unwind": "$accounts"},
{"$project": {
"display_username": "$customers.username",
"display_account_username": "$accounts.username",
"display_action": 1,
"timezone": "$customers.timezone",
"date": 1,
"user_id": 1,
"target_id": 1,
"target_id2": 1,
"source_ip": 1
}},
{'$match':{'$and':[{'display_username':{'$regex':'ABC', '$options':'i'}}]}}
]