sql >> Databáze >  >> NoSQL >> MongoDB

Jak mám strukturovat svá vnořená volání reactivemongo v mé aplikaci play2?

Nejsem odborník na mongoDB ani na ReactiveMongo, ale zdá se, že se snažíte používat databázi NoSQL stejným způsobem, jako byste používali standardní databáze SQL. Všimněte si, že mongoDB je asynchronní, což znamená, že operace mohou být provedeny v budoucnu, proto operace vložení/aktualizace nevracejí dotčené dokumenty. K vašim otázkám:

Pravděpodobně byste se měli podívat na mongoDB db.collection.update() a zavolejte ji pomocí upsert parametr jako true. Pokud si to můžete dovolit, bude to buď aktualizovat dokumenty, pokud již existují v databázi, nebo je vložit jinak. Tato operace opět nevrací dotčené dokumenty, ale můžete zkontrolovat, kolik dokumentů bylo ovlivněno přístupem k poslední chyba . Viz reactivemongo.api.collections.GenericCollection#update který vrací Future[LastError] .

Ještě jednou, vložené/aktualizované dokumenty nebudou vráceny. Pokud opravdu potřebujete vrátit celý dotčený dokument zpět, budete muset provést další dotaz, abyste získali odpovídající dokumenty.

Pravděpodobně bych přepsal váš kód tímto způsobem (bez zpracování chyb/selhání):

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

Viz také Scala Futures:http://docs.scala-lang.org/ overviews/core/futures.html

To je opravdu užitečné!;)



  1. Jak škálovat SignalR pomocí Azure Worker Role a OWIN

  2. Aplikace Heroku spadne po aktualizaci MongoDB na 3.0

  3. Uložte data o poloze v dokumentu Mongodb

  4. Jaký je v Mongo rozdíl mezi shardováním a replikací?