MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Ordinamento complesso Mongo?

AGGIORNAMENTO: Questa risposta sembra essere obsoleta; sembra che l'ordinamento personalizzato possa essere ottenuto più o meno usando il $project funzione della pipeline di aggregazione per trasformare i documenti di input prima dell'ordinamento. Vedi anche la risposta di @Ari.

Non penso che questo sia possibile direttamente; la documentazione di ordinamento certamente non menziona alcun modo per fornire una funzione di confronto personalizzata.

Probabilmente è meglio eseguire l'ordinamento nel client, ma se sei davvero determinato a farlo sul server potresti essere in grado di utilizzare db.eval() per organizzare l'esecuzione dell'ordinamento sul server (se il client lo supporta).

Ordinamento lato server:

db.eval(function() { 
  return db.scratch.find().toArray().sort(function(doc1, doc2) { 
    return doc1.a - doc2.a 
  }) 
});

Rispetto all'ordinamento lato client equivalente:

db.scratch.find().toArray().sort(function(doc1, doc2) { 
  return doc1.a - doc2.b 
});

Nota che è anche possibile ordinare tramite una pipeline di aggregazione e per $orderby operatore (ovvero in aggiunta a .sort() ), tuttavia nessuno di questi metodi ti consente di fornire una funzione di ordinamento personalizzata.