У меня есть коллекция в моей базе данных MongoDB с несколькими ключами. Теперь я хочу обновить эту коллекцию новым полем. Так вот, что я до сих пор:ReactiveMongo FindAndModify Уточнение
def confirm(hash: String) = {
val myDb = dbConn.db(dbName)
val userCollection = myDb[BSONCollection]("user")
val selector = BSONDocument(idKey -> BSONObjectID(hash))
val modifier = BSONDocument(
"$set" -> BSONDocument("date" -> BSONString(now.toString)) // Line 1
)
val command = FindAndModify(
userCollection.name,
selector,
Update(modifier, fetchNewObject = true)
)
myDb.command(command)
.map { user => // Line 2
Right(bidList)
}.recover {
case LastError(ok,err, code, errMsg, _) =>
Left(ServiceError(errMsg.getOrElse("failure!")))
}
}
У меня есть две проблемы, связанные с реализацией выше:
On Line 1: Будет ли это обновление существующего документа с новым полем называется дата?
On Line 2: Сопоставление команды myDb.command (команда) дает мне опцию [BSONDocument], но меня удивляет то, что у меня есть неявное преобразование в сфере видимости. Поэтому я ожидал, что он вернет опцию [Пользователь]!
Вы не указали, какие версии вы используете. В RM 0.11.7 у вас есть операция коллекции '.findAndUpdate'. – cchantep
Это ReactiveMongo 0.11.7 против MongoDB 3.0.6 – sparkr
Вы можете посмотреть [.findAndUpdate] (http://reactivemongo.org/releases/0.11/api/index.html#[email protected] findAndUpdate [Q, U]% 28selector: Q, обновление: U, fetchNewObject: Boolean, upsert: Boolean, сортировка: Опция [GenericCollection.this.pack.Document], поля: Опция [GenericCollection.this.pack.Document]% 29 % 28implicitselectorWriter: GenericCollection.this.pack.Writer [Q], implicitupdateWriter: GenericCollection.this.pack.Writer [U] implicitec: scala.concurrent.ExecutionContext% 29: scala.concurrent.Future [GenericCollection.this.BatchCommands.FindAndModifyCommand .FindAndModifyResult]) – cchantep