我使用最新版MongoDB中的聚合框架进行了查询。问题是我无法找到获得结果的方法,因为它花费的时间太长而且进程崩溃。
Constructora 包含50.000个文档(包括嵌入式文档等)
{
_id: 1,
edificio: [
{
_id:58,
pais: "Argentina",
provincia: "Buenos Aires",
ciudad: "Tandil",
direccion: "9 de Julio 845",
departamento: [
{
_id:45648651867,
nombre_depto: "a"
},
...
]
}
...
]
},
{
_id:2,
edificio: [...],
...
}
...
变量包含400,000个文档,包括嵌入文档。
{
_id:1
medicion_departamento: [
{
_id:1,
valmax:40
id_departamento:6,
...
},
...
]
},
{
_id: 2,
medicion_departamento: [...]
},
...
Medicion ,包含8.000.000个文档。
{
_id:1,
id_departamento: 6,
id_variable: 1,
valor: 6269
},
{
_id:2,
...
},
...
我希望部门(pais, provincia, ciudad, departamento.nombre
)的地址超过"变量"中的valmax
值。在#34; medicion"中的五分之一时间valor
。我的疑问是:
db.constructora.aggregate([
{$unwind:"$edificio"},
{$unwind:"$edificio.departamento"},
{$lookup:
{
from: "variable",
localField: "edificio.departamento._id",
foreignField: "medicion_departamento.id_departamento",
as: "var"
}
},
{$unwind: "$var"},
{$unwind: "$var.medicion_departamento"},
{$match: {"var.nombre":"electricidad"}},
{$lookup:
{
from: "medicion",
localField: "var.medicion_departamento.id_departamento",
foreignField: "id_departamento",
as: "med"
}
},
{$unwind:"$med"},
{$project:{"id_dto":"med.id_departamento", "consumo":"$med.valor","valorMult":{$multiply:["$var.valmax",5]}, "edificio.pais":1, "edificio.provincia":1, "edificio.direccion":1, "edificio.departamento.nombre_depto":1}},
{$match:{"consumo":{$gt:"valorMult"}}},
{$group:{_id:{"a": "edificio.pais", "b":"edificio.provincia", "c":"edificio.direccion", "d":"edificio.departamento.nombre_depto"}}}
]);
当我删除管道中的最后一个匹配和组时,查询将返回0.08s中的数据,但是当我使用match和group运行它时,它将一直运行,直到进程崩溃。我该怎么做才能修复(或优化)它?
谢谢!