MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Sortieren nach Stringlänge in Mongodb/pymongo

Es gibt viele Dinge (und grundlegende APIs), die ich persönlich lieben würde im Aggregationsframework zu sehen, wie zum Beispiel:

Mathematische Funktionen

  • log (wie in Logarithmus)
  • Decke
  • Etage

Array

  • Summe

Zeichenfolge

  • Länge

Um nur einige zu nennen.

Und das ohne auf obskure Verwendungen von $mod zurückzugreifen Bediener oder andere Mittel in solchen Fällen wie "Decke" und "Boden". Aber ich schweife ab.

Ihre "Saitenlänge" fällt in diese Kategorie. Heben Sie ein JIRA-Problem darüber auf. Aber jetzt können Sie mapReduce und die vorhandene JavaScript-Funktionalität verwenden:

db.collection.mapReduce(
    function() {
        emit( this.item.length, this.item );
    },
    function(key,values) {
        return values;
    },
    { "out": { "inline": 1 } }
)

Während das also tatsächlich den funky "mapReduce"-Stil hat, ein neu geformtes Dokument zurückzugeben und natürlich alles die gleiche Länge in einem Array hat, nutzt es die Natur von "mapReduce" (nicht nur eingeschränkt an MongoDB ) und ermöglicht das Sortieren des ausgegebenen „Schlüssel“-Werts in der Antwort.