Выполните 2 операции для обновления на ReactiveMongo

Я тестирую следующие 2 запроса на оболочке mongo, и он работает,

Но теперь мне нужно выполнить тот же запрос в реактивноммонго.

Кто-нибудь может подсказать, как сделать запрос в реактивноммонго.

doc = db.offer.find({"_id": "5704441ea356f55ab590e8f4"})

db.student.update(
  { "_id" : "570681b30fc032dea831c132"},
  { $push: { 
    "presell": [
        { "_id" : doc }
      ]
    } 
  }
)

есть ли лучший способ запустить этот запрос?


person Sanx    schedule 08.04.2016    source источник
comment
Не уверен, что вы имеете в виду здесь. Вы хотите получить документ из одной коллекции и поместить его в свойство массива другого документа? Вам нужен весь документ или только _id? Кроме того, ваш оператор $push создает массив из одного элемента внутри другого массива "presell". Таким образом, это будет выглядеть как "presell": [[{ "_id": { document } }]]. Вы, вероятно, имеете в виду { "$push": { "presell": { "_id": doc } } } или даже { "$push": { "presell": { "_id": doc._id } } } или просто { "$push": { "presell": doc } }. Трудно сказать, что вы на самом деле имеете в виду здесь.   -  person Neil Lunn    schedule 08.04.2016
comment
Кроме того, если вы не используете фреймворк, который выполняет автоприведение из-за определенной схемы для документов, определяющих типы, вы, вероятно, имеете в виду "_id": ObjectId("5704441ea356f55ab590e8f4"), если только данные не перепутались, и вы каким-то образом сохранили ObjectId значений в виде строк.   -  person Neil Lunn    schedule 08.04.2016
comment
Что вы пробовали? Вы внимательно прочитали документацию?   -  person cchantep    schedule 08.04.2016


Ответы (1)


использование flatMap было решением, которое я искал

  def preSell( user_id: String, offer_id: String ) = Action.async {

    val futureResults = collection_offer.find( Json.obj("_id" -> offer_id ) ).one[JsValue]
    futureResults.flatMap {
      case Some(document) => 

        val futureUpdate = collection.update( Json.obj( "_id" -> user_id ), Json.obj( "$addToSet" -> Json.obj( "presell" ->  Json.toJson(document) ) ) )

        futureUpdate.map { result =>
          Logger.debug("Successfully update")
          Ok( Json.obj( data -> Json.obj( "_id" -> user_id ) ) )
        }.recover {
          case t: TimeoutException =>
            Logger.error("Problem found in student update process")
            InternalServerError(t.getMessage)
        }

      case None => 
        Future.successful( Ok( Json.obj( data -> "Document NotFound" ) ) )
    }.recover {
      case t: TimeoutException =>
        Logger.error("Problem obtaining teacher")
        InternalServerError(t.getMessage)
    }

  }

Scala Play Action.async не может разрешить OK как mvc.AnyContent

person Sanx    schedule 11.04.2016