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

75
Visualizações
Cómo obtener los últimos N elementos con una clave coincidente de una colección MongoDB

Tengo una colección de documentos que se ve así:

 [ { "_id": "588cf61e5120ac11d4366f5c", "title": "This is a test entry", "entrybody": "This is the body of an entry", "creationdate": 1111, "author": "1223cllclclclc", "__v": 0 }, { "_id": "588cf6a556414f02f4e6a865", "title": "This is a new entry", "entrybody": "This is the body of an nuew entry", "creationdate": 11114040050505, "author": "1223cllclclclclslslsl", "__v": 0 }, { "_id": "588cf767fc2ede200cd5738e", "title": "This is a new entry", "entrybody": "This is the body of an nuew entry", "creationdate": 11114040050505, "author": "1223cllclclclclslslsl", "__v": 0 } ..... ]

Me gustaría obtener los últimos n registros de cada autor y luego ordenarlos por fecha de creación. Busqué cómo hacer esto con la agregación pero estoy atascado.

Necesito los últimos N documentos de la colección que coincidan con una clave específica, por ejemplo, autor, y luego tengo que ordenar ese resultado por "fecha de creación". Creo que eso es diferente de esta pregunta mongodb: ¿cómo obtener los últimos N registros?

Gracias por adelantado.

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

0

Puedes probar algo como esto.

$sort para procesar los registros de cada author en la última fecha de creationdate .

$group y $project para elegir los últimos N registros de cada author .

$unwind y $sort para procesar registros por fecha de creationdate .

 db.collection.aggregate({ $sort: { author: 1, creationdate: -1 } }, { $group: { _id: "$author", data: { $push: "$$ROOT" } } }, { $project: { _id: 0, lastN: { $slice: ["$data", N] } } }, { $unwind: "$lastN" }, { $sort: { "lastN.creationdate": -1 } })
over 4 years ago · Santiago Trujillo Relatório

0

Aquí hay una forma alternativa de resolver el problema con la ayuda del método forEach :

 var result = {}; db.collection.find().sort({"author": 1, "creationda‌‌te":-1}).forEach(function(doc) { if (!(doc.author in result)) { result[doc.author] = []; } if (result[doc.author].length < 5) { result[doc.author].push(doc); } })

Después de la ejecución, la variable de result se llena con documentos separados por el nombre del autor como

 { 'author1': [ {doc1}, {doc2} ], 'author2': [ {doc1}, {doc2} ] }
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