sql >> Databáze >  >> NoSQL >> MongoDB

Mongo komplexní třídění?

AKTUALIZACE: Tato odpověď se zdá být zastaralá; zdá se, že vlastního třídění lze víceméně dosáhnout pomocí $project funkce agregačního kanálu pro transformaci vstupních dokumentů před tříděním. Viz také odpověď @Ari.

Nemyslím si, že je to možné přímo; dokumentace řazení rozhodně nezmiňuje žádný způsob, jak poskytnout vlastní porovnávací funkci.

Pravděpodobně nejlépe uděláte třídění v klientovi, ale pokud jste opravdu rozhodnuti to udělat na serveru, možná budete moci použít db.eval() zařídit spuštění řazení na serveru (pokud to váš klient podporuje).

Řazení na straně serveru:

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

Oproti ekvivalentnímu řazení na straně klienta:

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

Všimněte si, že je také možné třídit pomocí agregačního kanálu a podle $orderby operátor (tj. kromě .sort() ), ani jeden z těchto způsobů vám však neumožňuje poskytnout vlastní funkci řazení.



  1. Najděte záznamy MongoDB, kde pole pole není prázdné

  2. MongoDB dotaz $in s regulárním polem prvku

  3. získání atributů schématu z modelu Mongoose

  4. MongoDB $replaceAll