MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как трябва да структурирам моите вложени reactivemongo повиквания в моето play2 приложение?

Не съм експерт по mongoDB, нито по ReactiveMongo, но изглежда, че се опитвате да използвате NoSQL база данни по същия начин, както бихте използвали стандартни SQL бази данни. Имайте предвид, че mongoDB е асинхронен, което означава, че операциите може да бъдат изпълнени в бъдеще, поради което операциите за вмъкване/актуализация не връщат засегнати документи. Относно вашите въпроси:

Вероятно трябва да погледнете mongoDB db.collection.update() и го извикайте с upsert параметър като верен. Ако можете да си го позволите, това или ще актуализира документите, ако вече съществуват в базата данни, или ще ги вмъкне по друг начин. Отново, тази операция не връща засегнати документи, но можете да проверите колко документа са били засегнати чрез достъп до последна грешка . Вижте reactivemongo.api.collections.GenericCollection#update което връща Future[LastError] .

Още веднъж вмъкнати/актуализирани документи няма да бъдат върнати. Ако наистина трябва да върнете обратно целия засегнат документ, ще трябва да направите друга заявка, за да извлечете съответстващи документи.

Вероятно бих пренаписал кода ви по следния начин (без обработка на грешка/отказ):

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

Вижте също Scala Futures:http://docs.scala-lang.org/ overviews/core/futures.html

Това е наистина полезно!;)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Групово вмъкване (Bulk.insert) срещу вмъкване на множество (вмъкване ([...]))

  2. Mongodb NoRM и POCO

  3. MongoDB скрипт за архивиране на репликация, зададен локално към Windows Server

  4. Какви са основните команди на MongoDB и как да ги използвам?

  5. Как да използвате $ позиционен оператор в MongoDB C# драйвер версия 2