【发布时间】:2021-10-27 18:17:11
【问题描述】:
有没有办法在 ReactiveMongoDB (19.2) 中使用 MongoDB 的 identifier update array filter?想象一个 db 集合模式:
{
"_id": ObjectId("617942b33b850d6bbc490420"),
"provider": "Google",
"myArr_e": [
{
"name": "cloud",
"lastDate": ISODate("2021-10-27T18:00:00.000+00:00")
}
]
}
我想更新文档 ID 为 ObjectId("617942b33b850d6bbc490420") 且 myArr_e.name 为“云”的 lastDate 字段。我可以使用以下方法在 MongoDB 中成功编写查询:
db.apv.updateOne({ "_id": ObjectId("617942b33b850d6bbc490420") }, { $set: { "myArr_e.$[elem].lastDate": new Date() }}, { "arrayFilters": [{ "elem.name": "cloud" }]});
但我无法在我的应用程序中使用 ReactiveMongoDB 执行此操作。这是我最好的尝试:
def getCollection(collName: String): Future[JSONCollection]
def updateMyArr: Future[WriteResult] = {
val q = obj("_id" -> obj("$oid" -> "617942b33b850d6bbc490420"))
val u = obj("$set" -> obj("myArr_e.$[elem].lastDate" -> new Date()))
val af = obj("arrayFilters" -> arr(obj("elem.name" -> "cloud")))
for {
coll <- getCollection("collName")
uwr <- coll.update.one(q, u, upsert = false, multi = false, collation = None, arrayFilters = af)
} yield {
uwr
}
}
我从中获得了 http 202,但我可以看到该文档尚未更新。这在 ReactiveMongoDB (19.2) 中可行吗?我试图找到这方面的文档,但如果它在那里,那么它就对我隐藏了。谢谢_
【问题讨论】:
标签: mongodb reactivemongo