Медленно выполняется запрос при присоединении документа

Есть коллекции: user, address, addressComment:

user

{ "_id" : "2", "name" : "user2" }
{ "_id" : "1", "name" : "user1" }

address

{ "_id" : "a1", "street" : "Address1", "user_id" : "1" }

addressComment

{ "_id" : "ac2", "address_id" : "a1", "comment" : "Comment2" }
{ "_id" : "ac1", "address_id" : "a1", "comment" : "Comment1" }

Если сделать агрегацию:

[
{ $lookup: {
       "from" : "address",
       "let" : {
       "userId" : "$_id"},
       "pipeline" : [
        {
           "$match" : {
               "$expr" : {
                   "$and" : [
                       {
                           "$eq" : [
                               "$user_id", 
                               "$$userId"
                           ]
                       }
                    ]
                }
            }
          }], 
          "as" : "address"
        }
    },
    {
        $unwind: {
            path: "$address",
            reserveNullAndEmptyArrays: true
        }
    }
    { 
        $lookup: {
            "from" : "addressComment",
            "let" : {
            "addressId" : "$_id"},
            "pipeline" : [{
                "$match" : {
                    "$expr" : {
                        "$and" : [{
                            "$eq" : [
                                "$address_id",
                                "$$addressId"
                            ]
                        }]
                    }
                }
            }], 
            "as" : "address.comments"
        }
    }
]

Если как в коде выше, сделать присоединение документов comments к присоединенному документу address,то при количестве документов в коллекции comments > 20 000, время выполнения запроса достигает 10 секунд

На address_id и user_id индексы есть.

Также, если просто присоединить addressComment к address, то запрос выполняется за 0.3 секунды. То есть проблема в присоединении к присоединенному документу.


Ответы (0 шт):