MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak powinienem uporządkować moje zagnieżdżone wywołania reactivemongo w mojej aplikacji play2?

Nie jestem ekspertem w mongoDB ani w ReactiveMongo, ale wygląda na to, że próbujesz używać bazy danych NoSQL w taki sam sposób, jak używasz standardowych baz SQL. Należy zauważyć, że mongoDB jest asynchroniczna, co oznacza, że ​​operacje mogą być wykonywane w przyszłości, dlatego operacje wstawiania/aktualizacji nie zwracają dokumentów, których dotyczy problem. Jeśli chodzi o Twoje pytania:

Powinieneś prawdopodobnie spojrzeć na mongoDB db.collection.update() i wywołaj ją za pomocą upsert parametr jako prawdziwy. Jeśli możesz sobie na to pozwolić, zaktualizuje dokumenty, jeśli już istnieją w bazie danych, lub wstawi je w inny sposób. Ponownie, ta operacja nie zwraca dokumentów, których dotyczy problem, ale możesz sprawdzić, ile dokumentów zostało dotkniętych, otwierając ostatni błąd . Zobacz reactivemongo.api.collections.GenericCollection#update który zwraca Future[LastError] .

Ponownie wstawione/zaktualizowane dokumenty nie będą zwracane. Jeśli naprawdę musisz zwrócić cały dokument, którego dotyczy problem, musisz wykonać kolejne zapytanie, aby pobrać pasujące dokumenty.

Prawdopodobnie przepisałbym twój kod w ten sposób (bez obsługi błędów/awarii):

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!")
                    }
                }
            }
        )
}

Zobacz także Kontrakty terminowe Scala:http://docs.scala-lang.org/ przeglądy/core/futures.html

To jest naprawdę przydatne!;)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Konwertuj obraz base64 na plik w węźle Js

  2. Nowicjusz nie może uzyskać JSON

  3. Użytkownik root MongoDB

  4. Zapytania wewnątrz tablic Postgres JSON

  5. Topologia węzła Mongolab została zniszczona