【发布时间】:2021-08-19 12:36:13
【问题描述】:
我需要对candidatos 和ofertas 两个集合的结果进行分组,然后“合并”这些组以返回具有匹配值的数组。
我使用聚合数据和类似数据创建了这个示例,以便更容易测试:
https://mongoplayground.net/p/m0PUfdjEye4
这是对我所面临问题的解释。
我可以独立地让两组都获得所需的结果:
候选人集合:
db.getCollection('ofertas').aggregate([
{"$group" : {_id:"$ubicacion_puesto.provincia", countProvinciaOferta:{$sum:1}}}
]);
这是结果...
优惠集:
db.getCollection('candidatos').aggregate([
{"$group" : {_id:"$que_busco.ubicacion_puesto_trabajo.provincia", countProvinciaCandidato:{$sum:1}}}
]);
这是结果...
我需要做的是聚合这些组以根据他们的 _id 巧合合并他们的结果。我认为我在下一个聚合中以正确的方式进行,但字段countOfertas 总是返回0.0。我认为我的project $cond 有问题,但我不知道是什么问题。这是汇总:
db.getCollection('candidatos').aggregate([
{"$group" : {_id:"$que_busco.ubicacion_puesto_trabajo.provincia", countProvinciaCandidato:{$sum:1}}},
{
$lookup: {
from: 'ofertas',
let: {},
pipeline: [
{"$group" : {_id:"$ubicacion_puesto.provincia", countProvinciaOferta:{$sum:1}}}
],
as: 'ofertas'
}
},
{
$project: {
_id: 1,
countProvinciaCandidato: 1,
countOfertas: {
$cond: {
if: {
$eq: ['$ofertas._id', "$_id"]
},
then: '$ofertas.countProvinciaOferta',
else: 0,
}
}
}
},
{ $sort: { "countProvinciaCandidato": -1}},
{ $limit: 20 }
]);
这是结果,但正如您所见,字段 countOfertas 始终为 0
欢迎任何形式的帮助
【问题讨论】:
-
你给了我们很棒的 mongo 游乐场。但尽量避免发布图片