mongoDB - Lookup de un documents dentro de un document

 
Vista:

Lookup de un documents dentro de un document

Publicado por redleon (1 intervención) el 03/08/2021 01:45:20
Saludos, deseo hacer lo siguiente usando mongo.
Tengo un Collection que contiene la información de una serie de competencias a realizar y en otra tengo los resultados de las competencias.
En cada competencia deben competir ciertos animales según su raza, sexo, tipo de animal(ovino o caprino) y grupo al que pertenece.

Quisiera hacer un lookup pero que haga match con los valores que estan dentro de un documents que pertenece al collection resultados.

La forma de los collections es la siguiente:
Collection competition

{
"_id" : ObjectId("61019d494f3d0415eacfba9b"),
"pts_first" : 10,
"pts_second" : 0,
"pts_third" : 0,
"status" : true,
"created_at" : ISODate("2021-07-28T13:39:36.340Z"),
"updated_at" : ISODate("2021-07-28T13:39:36.341Z"),
"class" : "PUNTUADO",
"type_comp" : "GRUPO",
"name" : "H OVINO / CHAROLAIS / MENOR",
"type_animal" : "OVINO",
"sex" : "H",
"race" : "CHAROLAIS",
"group" : "MENOR",
"__v" : 0
}

y el collection resultsC que contiene los resultados de la competencia previa a la que se ejecuta por grupos tiene esta forma:


{
"_id" : ObjectId("6101a365fbe4357d6e083b57"),
"firts_point" : 5,
"second_point" : 3,
"third_point" : 2,
"status" : true,
"created_at" : ISODate("2021-07-28T18:18:51.937Z"),
"updated_at" : ISODate("2021-07-28T18:18:51.937Z"),
"status_result" : "V",
"id_competencia" : "61019d4a4f3d0415eacfbb6a",
"name_competencia" : "MACHOS CHAROLLAIS 24 A 36 MESES",
"category" : "24 A 36 MESES",
"group" : "ADULTO",
"sex" : "M",
"race" : "CHAROLLAIS",
"type_animal" : "OVINO",
"firts_animal" : {
"status" : true,
"status_championship" : true,
"created_at" : "2021-07-09T20:16:48.103Z",
"updated_at" : "2021-07-09T20:16:48.103Z",
"_id" : "60e8b07ac380575ac7ab050d",
"name" : "ANIMAL 7",
"sex" : "M",
"birthday" : "2019-02-06T00:00:00.000Z",
"type" : "OVINO",
"race" : "CHAROLLAIS",
"category" : "24 A 36 MESES",
"owner" : "EQUIPO 1",
"breeder" : "REDIS",
"team" : "EQUIPO 1",
"ID_team" : "60e1a47aa5a732422abc187a",
"register" : "13",
"tatoo" : "13",
"asociation" : "AVCO",
"group" : "ADULTO",
"animalAll_id" : "60e8b07ac380575ac7ab050c",
"__v" : 0,
"showname" : "13-ANIMAL 7 / Eq: EQUIPO 1 / Cr: REDIS"
},
"second_animal" : [],
"third_animal" : [],
"__v" : 0
}

quisiera hacer un join de ambas tablas, y que me arroje la informacion de la competencia y de los animales que deben competir en cada competencia.
Osea, al hacer el join quiero que me regrese la data de la competencia de H OVINO / CHAROLAIS / MENOR y los animales que deben estar en ellas (animales que esten como firts_animal en el collection resultsC
Hasta el momento he usado esto pero sin resultados:

db.getCollection('competitions').aggregate([
{$match: {type_comp:'GRUPO'}},
{ $lookup:
{ from: 'resultsC',
let: {
type_animal: "$firts_animal.type",
race_animal: "$firts_animal.race",
sex_animal:"$firts_animal.sex",
group_animal:"$firts_animal.grupo" },

pipeline: [
{ $match:
{ $expr:
{ $and: [
{ $eq: ["$type_animal", "$$type_animal"] },
{ $eq: ["$race", "$$race_animal"] },
{ $eq: ["$sex", "$$sex_animal"] },
{ $eq: ["$group_animal", "$$group_animal"] }
] } } }],
as: "animals_comp" } }])



Necesito ayuda!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder