sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan skal jeg strukturere mine indlejrede reactivemongo-kald i min play2-applikation?

Jeg er ikke ekspert i mongoDB, hverken i ReactiveMongo, men det ser ud til, at du forsøger at bruge en NoSQL-database på samme måde, som du ville bruge standard SQL-databaser. Bemærk, at mongoDB er asynkron, hvilket betyder, at operationer kan blive udført i en fremtid, dette er grunden til, at indsættelse/opdateringsoperationer ikke returnerer berørte dokumenter. Angående dine spørgsmål:

Du bør nok se på mongoDB db.collection.update() metode og kald den med upsert parameter som sand. Hvis du har råd til det, vil dette enten opdatere dokumenter, hvis de allerede findes i databasen, eller indsætte dem på anden måde. Igen, denne handling returnerer ikke berørte dokumenter, men du kan kontrollere, hvor mange dokumenter der er blevet påvirket ved at gå til sidste fejl . Se reactivemongo.api.collections.GenericCollection#update som returnerer en Future[LastError] .

Igen vil indsatte/opdaterede dokumenter ikke blive returneret. Hvis du virkelig har brug for at returnere hele det berørte dokument, skal du foretage en ny forespørgsel for at hente matchende dokumenter.

Jeg ville sandsynligvis omskrive din kode på denne måde (uden fejl-/fejlhåndtering):

def dostuff() = Action {
    implicit request =>
        form.bindFromRequest.fold(
            errors => BadRequest(views.html.invite(errors)),
            form => {
                val objectsReadyForSave = createObjects(form.companyId, form.companyName, sms_pattern.findAllIn(form.phoneNumbers).toSet)
                Async {
                    val operations = for {
                        data <- objectsReadyForSave
                    } yield collection.update(BSONDocument("cId" -> data.cId.get, "userId" -> data.userId.get), data, upsert = true)

                    Future.sequence(operations).map {
                        lastErrors =>
                            Ok("Documents probably inserted/updated!")
                    }
                }
            }
        )
}

Se også Scala Futures:http://docs.scala-lang.org/ overviews/core/futures.html

Dette er virkelig nyttigt!;)



  1. mongodb-forespørgsel:$size med $gt returnerer altid 0

  2. Sådan grupperes efter forskellige felter

  3. Node JS Redis Client Connection Prøv igen

  4. Hvad er forskellen mellem area og BoundingBox fra Redis's kildekode