Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

258
Visualizações
$concat en mongodb agregado

Esto un poco confuso. Estoy tratando de $group grouping resultado de la aggregatation y, mientras los agrupo, creo un nuevo campo que consiste en la concatenación de dos campos diferentes. Mmm. En realidad, no estaba dispuesto a compartir la estructura de la base de datos y confundirlo. Pero la descripción no es explicativa.

Así que, aquí vamos.

colección de estudiantes

 {id: "1", school: "georgia tech"}

colección universitaria

 {name: "georgia tech" , state: "Georgia" , city: "Atlanta"}

¿Qué quiero conseguir? Quiero tener

 {id: 1, name: "georgia tech" , place: "Georgia_Atlanta"}

¿Qué he hecho para lograr esto?

 db.student.aggregate([ {$match: {"id": "1"}}, {$lookup: {from: "university" , localField: "school" , foreignField: "name", as: "document"}}, {$group: {_id: "$id", name: {$push: "$school"}, place: {$push: {$concat: ["$document.state" , "_" , "$document.city"]}}}} ])

Pero esto arroja un error como;

 assert: command failed: { "ok" : 0, "errmsg" : "$concat only supports strings, not Array", "code" : 16702 }

Mientras tanto;

 db.student.aggregate([ {$match: {"id": "1"}}, {$lookup: {from: "university" , localField: "school" , foreignField: "name", as: "document"}}, {$group: {_id: "$id", name: {$push: "$school"}, place: {$push: "$document.state" }}} ])

devuelve como;

 { "_id" : "1", "name" : [ "georgia tech" ], "place" : [ [ "Georgia" ] ] }

El problema es concatenar los campos de state y city . Así que aquí la pregunta de nuevo. ¿Cómo puedo concatenar document.state , _ y document.city ?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

$lookup devuelve una matriz, por lo que debe usar el operador $arrayElemAt para aplanarlo (si tiene un solo elemento) o $unwind (si tiene varios elementos). Entonces, al final, debería poder ejecutar la siguiente canalización para obtener el resultado deseado:

 db.student.aggregate([ { "$match": { "id": "1" } }, { "$lookup": { "from": "university", "localField": "school", "foreignField": "name", "as": "document" } }, { "$project": { "id": 1, "university": { "$arrayElemAt": [ "$document", 0 ] } } }, { "$project": { "id": 1, "name": "$university.name", "place": { "$concat": ["$university.state", "_", "$university.city"] } } } ])
over 4 years ago · Santiago Trujillo Relatório

0

No sé el caso de uso exacto, pero si necesita usar GroupBy, esta es una versión funcional. De lo contrario, chridam está utilizando un enfoque más simple:

 db.student.aggregate([ {$match: {"id": "1"}}, {$lookup: {from: "university" , localField: "school" , foreignField: "name", as: "document"}}, {$group: {_id: "$id", name: {$first: "$school"}, tempplace: {$first: "$document" }}}, {$unwind: "$tempplace"}, {$project: {id: 1, name: 1, place: {$concat: ["$tempplace.state", "_", "$tempplace.city"]}}} ])
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda