2016-04-08 4 views
0

ich auf Mongo die nächsten 2 Abfrage am Testen Shell ein es funktioniert,Perform 2 Operationen auf ReactiveMongo aktualisieren

Aber jetzt muss ich die gleiche Abfrage in reactivemongo kann

Jemand einen Vorschlag geben, mich führen für, wie man die Abfrage in reactifeMongo macht

doc = db.offer.find({"_id": "5704441ea356f55ab590e8f4"}) 

db.student.update(
    { "_id" : "570681b30fc032dea831c132"}, 
    { $push: { 
    "presell": [ 
     { "_id" : doc } 
     ] 
    } 
    } 
) 

gibt es eine bessere Weise, diese Abfrage zu laufen?

+0

Nicht sicher, was Sie meinen hier auf der Suche war. Sie möchten ein Dokument aus einer Sammlung abrufen und in die Array-Eigenschaft eines anderen Dokuments verschieben? Willst du das "ganze" Dokument oder nur die '_id'? Auch Ihre '$ push'-Anweisung erstellt ein" Einzelelement-Array "** in einem anderen Array von" "Presell" ". So würde es aussehen wie "Presell": [[{"_id": {Dokument}}]]]. Du meinst wahrscheinlich '{" $ push ": {" presell ": {" _id ": doc}}} oder sogar' {"$ push": {"presell": {"_id": doc._id}}} 'oder einfach' {"$ push": {"presell": doc}} '. Schwer zu sagen, was du hier wirklich meinst. –

+0

Auch wenn Sie nicht in einem Framework sind, das "Autocasting" aufgrund des s definierten "Schemas" für die Dokumente ausführt, die "Typen" definieren, meinen Sie wahrscheinlich '" _id ": ObjectId (" 5704441ea356f55ab590e8f4 "), außer die Daten sind durcheinander und Sie haben irgendwie "ObjectId" -Werte als "Strings" gespeichert. –

+0

Was hast du probiert? Haben Sie die [Dokumentation] (http://reactivemongo.org/releases/0.11/documentation/tutorial/find-documents.html) sorgfältig gelesen? – cchantep

Antwort

0

die Verwendung von flatMap war die Lösung, die ich für

def preSell(user_id: String, offer_id: String) = Action.async { 

    val futureResults = collection_offer.find(Json.obj("_id" -> offer_id)).one[JsValue] 
    futureResults.flatMap { 
     case Some(document) => 

     val futureUpdate = collection.update(Json.obj("_id" -> user_id), Json.obj("$addToSet" -> Json.obj("presell" -> Json.toJson(document)))) 

     futureUpdate.map { result => 
      Logger.debug("Successfully update") 
      Ok(Json.obj(data -> Json.obj("_id" -> user_id))) 
     }.recover { 
      case t: TimeoutException => 
      Logger.error("Problem found in student update process") 
      InternalServerError(t.getMessage) 
     } 

     case None => 
     Future.successful(Ok(Json.obj(data -> "Document NotFound"))) 
    }.recover { 
     case t: TimeoutException => 
     Logger.error("Problem obtaining teacher") 
     InternalServerError(t.getMessage) 
    } 

    } 

Scala Play Action.async cant resolve Ok as mvc.AnyContent