sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur ska jag strukturera mina kapslade reactivemongo-anrop i min play2-applikation?

Jag är ingen expert på mongoDB varken i ReactiveMongo men det verkar som att du försöker använda en NoSQL-databas på samma sätt som du skulle använda vanliga SQL-databaser. Observera att mongoDB är asynkront vilket innebär att operationer kan utföras i en framtid, det är därför insättnings-/uppdateringsoperationer inte returnerar påverkade dokument. Angående dina frågor:

Du borde förmodligen titta på mongoDB db.collection.update() metoden och anropa den med upsert parameter som sann. Om du har råd kommer detta antingen att uppdatera dokument om de redan finns i databasen eller infoga dem på annat sätt. Återigen, den här åtgärden returnerar inte påverkade dokument men du kan kontrollera hur många dokument som har påverkats genom att gå till senaste felet . Se reactivemongo.api.collections.GenericCollection#update som returnerar en Future[LastError] .

Återigen kommer inte infogade/uppdaterade dokument att returneras. Om du verkligen behöver returnera hela det berörda dokumentet måste du göra en ny fråga för att hämta matchande dokument.

Jag skulle förmodligen skriva om din kod på detta sätt (utan fel-/felhantering):

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 även Scala Futures:http://docs.scala-lang.org/ overviews/core/futures.html

Det här är verkligen användbart!;)



  1. Kan inte ansluta till MongoDB errno:61

  2. skicka resultat till ett annat kommando i redis

  3. Denormalisering av data i MongoDB

  4. Mongo-skalet kör en fråga från filen och visar resultatet