Медленно выполняется запрос при присоединении документа
Есть коллекции: 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 секунды. То есть проблема в присоединении к присоединенному документу.