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

Mongo-Reihenfolge nach Länge des Arrays

Ich dachte, Sie könnten vielleicht $size verwenden , aber das dient nur dazu, Arrays einer bestimmten Größe zu finden, nicht zu sortieren.

Aus der Mongo-Dokumentation:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24size

Sie können $size nicht verwenden, um einen Größenbereich zu finden (z. B. Arrays mit mehr als einem Element). Wenn Sie einen Bereich abfragen müssen, erstellen Sie ein zusätzliches Größenfeld, das Sie erhöhen, wenn Sie Elemente hinzufügen. Indizes können nicht für den $size-Teil einer Abfrage verwendet werden, wenn jedoch andere Abfrageausdrücke enthalten sind, können Indizes verwendet werden, um nach Übereinstimmungen in diesem Abschnitt des Abfrageausdrucks zu suchen.

Sieht so aus, als könnten Sie dies wahrscheinlich ziemlich einfach mit dem neuen Aggregations-Framework Bearbeiten: tun das noch nicht herausgekommen ist. http://www.mongodb.org/display/DOCS/Aggregation+Framework

Aktualisieren Jetzt ist das Aggregation Framework draußen...

> db.test.aggregate([
  {$unwind: "$answers"}, 
  {$group: {_id:"$_id", answers: {$push:"$answers"}, size: {$sum:1}}}, 
  {$sort:{size:1}}]);
{
"result" : [
    {
        "_id" : ObjectId("5053b4547d820880c3469365"),
        "answers" : [
            {
                "content" : "answer1"
            },
            {
                "content" : "2nd answer"
            }
        ],
        "size" : 2
    },
    {
        "_id" : ObjectId("5053b46d7d820880c3469366"),
        "answers" : [
            {
                "content" : "answer1"
            },
            {
                "content" : "2nd answer"
            },
            {
                "content" : "The third answer"
            }
        ],
        "size" : 3
    }
  ],
  "ok" : 1
}