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

153
Visualizações
¿Cómo puedo obtener solo el primer registro coincidente en una combinación de mongoDb mediante la búsqueda?

Imagina dos colecciones de mongo.

FirstCollection tiene este formato:

 { "JoinField": "this is my data" }

SecondCollection tiene este formato (los datos reales son más complejos y necesitan aplanarse):

 { "FirstField" : "food", "SecondField": "bar", "Properties" : { "JoinField": "this is my data" } }

SecondCollection contiene duplicados y estoy tratando de unir las dos tablas y aplanar los datos en una sola proyección.

Esta consulta hará en términos generales lo que quiero:

 db.getCollection('FirstCollection').aggregate([ { "$lookup": { from: 'SecondCollection', localField: 'JoinField', foreignField: 'Properties.JoinField', as: 'secondCollection' } }, { "$unwind": "$secondCollection" }, { "$project": { "JoinField" : 1, firstField : "$secondCollection.FirstField", secondField : "$secondCollection.SecondField", } } ])

El único problema es que esto contiene duplicados en sí mismo porque repite los datos para cada duplicado en SecondCollection que coincide con una línea en FirstCollection.

¿Cómo puedo obtener solo el primer registro (o cualquier copia individual del registro) de SecondCollection?

EDITAR: Disculpas por la falta de claridad. Lo que obtendré actualmente de esa consulta, suponiendo un duplicado en SecondCollection, es esto:

 { "JoinField": "this is my data". "FirstField" : "food", "SecondField": "bar" } { "JoinField": "this is my data". "FirstField" : "food", "SecondField": "bar" }

Lo que quiero es esto:

 { "JoinField": "this is my data". "FirstField" : "food", "SecondField": "bar" }
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Intente buscar con canalización de agregación de MongoDB v3.6,

  • let pasar el campo local a la segunda tubería de recolección,
  • pipeline para hacer coincidir el campo y establecer un límite para devolver un solo documento
 { "$lookup": { from: "SecondCollection", let: { "jfield": "$JoinField" }, pipeline: [ { $match: { $expr: { $eq: ["$Properties.JoinField", "$$jfield"] } } }, { $limit: 1 } ], as: "secondCollection" } },

Patio de recreo


Segunda opción de MongoDB v3.2, coloque una etapa $set después $lookup y antes $unwind ,

  • $arrayElemAt elemento devuelto desde una posición específica
 { $set: { secondCollection: { $arrayElemAt: ["$secondCollection", 0] } } }

Patio de recreo

over 4 years ago · Santiago Trujillo Relatório

0

Si entiendo bien la pregunta, podrías probar esto

 db.b.aggregate([ //Used second collection as the source { "$group": { //Removing duplicates in the join field "_id": "$properties.joinField", FirstField: { "$addToSet": "$FirstField" }, SecondField: { "$addToSet": "$SecondField" }, "JoinField": { $first: "$Properties.JoinField" } } }, { "$lookup": { from: "a", localField: "JoinField", foreignField: "JoinField", as: "FirstCollection" } }, { "$unwind": "$FirstCollection" }, { "$project": { "JoinField": 1, firstField: "$FirstField", secondField: "$SecondField", } } ])
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