2016-07-04 6 views
0

ich reactivemongo in meinem Play-Framework-App und ich bemerkte, bin mit, dass alle Dokumente, wie zum BeispielMongoDB Objekt-ID entfernen, wenn die Ergebnisse aus einer Sammlung holen

vertreten
{name: "Robert", age: 41 } 

in MongoDB als

gespeichert sind
{_id: { $oid:"574005977e356b7310bcdc8d"}, name: "Robert", age: 41 } 

und das ist in Ordnung. Das ist die Methode, die ich die Dokumente

// Scala code 
def save(document: JsObject) 
     (implicit ec: ExecutionContext): Future[WriteResult] = { 
    collection.insert(document) 
} 

Letztere Darstellung auch speichern verwenden ist, was ich bekomme, wenn ich das gleiche Dokument aus der DB holen, mit dieser Methode:

def find(query: JsObject, queryOptions: QueryOpts, projection: JsObject, 
      sort: JsObject, pageSize: Int) 
(implicit ec: ExecutionContext): Future[List[JsObject]] = { 
    collection.find(query, projection) 
    .options(queryOptions) 
    .sort(sort) 
    .cursor[JsObject](ReadPreference.primaryPreferred) 
    .collect[List](pageSize) 
    } 

aber in diesem Fall habe ich d‘eine Darstellung wie

{_id: "574005977e356b7310bcdc8d", name: "Robert", age: 41 } 

erhalten, um die Dokumente an den anfordernden Client über meine RESTful API zu senden. Wie kann ich das bekommen?

+0

Sie können Json-Transformer verwenden: [Fall 6: Eine Verzweigung von Eingabe-JSON abschneiden] (https://www.playframework.com/documentation/2.5.x/ScalaJsonTransformers#Case-6:-Prune-a-branch- Von-Eingabe-JSON) –

Antwort

0

können Sie Json transformers verwenden: Case 6: Prune a branch from input JSON

... 
.collect[List](pageSize) 
.map(JsArray) 
.map(
    _.transform(
    Reads.list(
     (__\"_id").json.prune 
    ) 
) 
) 
... tranform JsResult to your needs 
0

Lassen Sie mich zunächst sagen, dass die folgende Darstellung ist nicht das, was in der MongoDB gespeichert, die BSON verwendet, aber was serialisiert wird die JSON erweiterte Syntax (siehe JSON documentation for ReactiveMongo).

Wenn Sie dann .cursor[T] für einen Abfrage-Build verwenden, können Sie einen benutzerdefinierten Dokumentleser (im impliziten Bereich) bereitstellen. Wenn Sie das JSON-Serialisierungspaket verwenden, bedeutet dies, dass Sie das entsprechende Reads[T] bereitstellen.

Ich würde auch hinzufügen, dass die Funktion .find und .save im Wesentlichen sind, was bereits von der ReactiveMongo Collection API getan wird.

Verwandte Themen