Не может соответствовать после проекта - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь выполнить сопоставление после проекта в агрегированном запросе.

Я добавил запрос на сопоставление после запроса проекта на конвейере.

Совпадение на полях без поиска работает, но сопоставление выполняетсяне работает с полями поиска.

Это работает:

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'}}]}}
        ]
...