0

Also muss ich meine Sammlung auf MongoDB von Feldern, die sich auf einem Array von Objekten befinden, sortieren.So verwenden Sie Aggregat mit ReactiveMongo

Ich habe

"columns": [{ 
    "kind": "FirstKind", 
    "descriptor": "Description1", 
    "data": "Data to be sorted" 
},{ 
    "kind": "SecondKind", 
    "descriptor": "Description2", 
    "data": "Data to be sorted" 
}] 

Was ich erreichen will ist „FirstKind“ und „Description1“ oder „SecondKind“ und „Description2“ und sortieren die Sammlung durch die Felddaten auswählen. Ich fand eine Lösung zu tun, dass auf MongoDB, indem Sie:

db.getCollection('results').aggregate(
    [{ 
     "$match": { 
      "$and": [{ 
       "columns.kind": "FirstKind" 
      }, { 
       "columns.descriptor": "Name" 
      }] 
     } 
    },{ 
     "$sort": { 
      "columns.data": -1 
     } 
    },{ 
     "$limit": 20 
    }] 
) 

Mein Problem ist nun, wie das auf Scala ReactiveMongo zu übersetzen. Ich habe versucht, diese Dokumentation zu verstehen: http://reactivemongo.org/releases/0.11/documentation/advanced-topics/aggregation.html, aber ich bin wirklich verwirrt darüber. Hat jemals jemand mit ReactiveMongo auf Scala aggregiert? Vielen Dank!

Antwort

1

Ich stimme zu, es ist nicht die einfachste Sache in ReactiveMongo.

Ich habe versucht, Ihren Code in die ReactiveMongo-Aggregation Abfrage syntax unten zu übersetzen. Allerdings habe ich es nicht ausgeführt, so dass Sie es möglicherweise ein wenig zwicken müssen.

val dao = reactiveMongoApi.db.collection[BSONCollection]("results") 
import dao.BatchCommands.AggregationFramework._ 

dao.aggregate(
    Match(BSONDocument(
    "columns.kind" -> "FirstKind", 
    "columns.descriptor" -> "Name")), 
    List(
    Sort(Descending("limit")), 
    Limit(20))) 
+0

so, bei 'find' Sie können Benutzer' .Cursor [CaseClass]() 'und dann anwenden sammeln oder irgendetwas anderes müssen Sie mit den Objekten zu tun. Wie machst du etwas Ähnliches mit "Aggregat", weil es scheint, als hätte es keinen "Cursor" –

+0

Sie sollten sich die [API-Referenz] (http://reactivemongo.org/releases/0.11/api/index) ansehen. html # reacticmongo.api.commands.AggregationFramework $ AggregationResult). – cchantep

+1

Wir haben, und es macht nicht viel Sinn –