sql >> Database >  >> NoSQL >> MongoDB

Hoe moet ik mijn geneste reactievemongo-oproepen in mijn play2-toepassing structureren?

Ik ben geen expert in mongoDB en ook niet in ReactiveMongo, maar het lijkt erop dat u een NoSQL-database op dezelfde manier probeert te gebruiken als standaard SQL-databases. Merk op dat mongoDB asynchroon is, wat betekent dat bewerkingen in de toekomst kunnen worden uitgevoerd. Dit is de reden waarom invoeg-/bijwerkbewerkingen geen betrokken documenten retourneren. Wat betreft uw vragen:

Je moet waarschijnlijk kijken naar de mongoDB db.collection.update() methode en roep het aan met de upsert parameter als waar. Als u het zich kunt veroorloven, zal dit ofwel documenten bijwerken als ze al in de database bestaan ​​of ze op een andere manier invoegen. Nogmaals, deze bewerking retourneert geen betrokken documenten, maar u kunt controleren hoeveel documenten zijn getroffen door de laatste fout . Zie reactivemongo.api.collections.GenericCollection#update die een Future[LastError] . retourneert .

Nogmaals, ingevoegde/bijgewerkte documenten worden niet geretourneerd. Als het echt nodig is om het volledige betrokken document terug te sturen, moet u een nieuwe vraag stellen om overeenkomende documenten op te halen.

Ik zou je code waarschijnlijk op deze manier herschrijven (zonder fout-/foutafhandeling):

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

Zie ook Scala Futures:http://docs.scala-lang.org/ overzichten/core/futures.html

Dit is echt handig!;)



  1. Wat doet de --bindip configuratie-optie in mongodb?

  2. Hoe mongoDB ISODate naar string in mongoDB te converteren?

  3. Paginering implementeren in mongodb

  4. Hoe kan ik met MongoDB een subdocument van een subarray bijwerken wanneer de elementpositie onbekend is?