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

121
Visualizações
Sorting documents by sum of specific field in array of other referenced documents

My main schema sort of looks like this:

 _id: id,
 random: random, 
 cards: [objectId, objectId, ...]   //ref to cards

ex of card:

 _id: id,
 random: random, 
 random: random,
 clicks: 15.

I would like to sort the top schema by the sum of clicks within the cards.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Query1

  • lookup to do the left join, and joined card documents to be an array (join happens if array contains the card _id)
  • sum the clicks
  • sort by the field that has the sum

*if you want descending use sort -1 instead of 1

Test code here

mainColl.aggregate(
[{"$lookup": 
   {"from": "cardCollection",
    "localField": "cards",
    "foreignField": "_id", 
    "as": "clickSum"}},
 {"$set": {"clickSum": {"$sum": "$clickSum.clicks"}}},
 {"$sort": {"clickSum": 1}}])

Query2

  • same like the above but does the calculation before the join (its better but slightly bigger code)

Test code here

mainColl.aggregate(
[{"$lookup": 
    {"from": "cardsCollection",  
      "localField": "cards",
      "foreignField": "_id",
      "pipeline": 
      [{"$group": {"_id": null, "clicksSum": {"$sum": "$clicks"}}}],
      "as": "clicksSum"}},
  {"$set": {"clicksSum": {"$arrayElemAt": ["$clicksSum.clicksSum", 0]}}},
  {"$sort": {"clickSum": 1}}])
about 4 years ago · Juan Pablo Isaza Relatório

0

I ended up using this:

model.aggregate([ 
          {$lookup: {from: "cards", localField: "cards", foreignField: "_id", as: "cards"}},
          {$set: {clickSum: {$sum: "$cards.clicks"}}},
          {$sort: {clickSum: -1}}
            ])
about 4 years ago · Juan Pablo Isaza 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