根据文档中的数据使用条件更新mongo中的文档,并在最后获取更新的文档

问题描述 投票:0回答:0

我有一个 mongodb 任务集合,文档如下:

id: objId
retries: Int
status: String
lockedUntill : ISO time

retries 可以是 1 到 10 的整数 状态可以是:

READY
,
AWAIT
,
FAILED
,
DONE
, 等等..

我正在使用 scala 和 reactive mongo,我想在状态下一次搜索 1 个文档

READY
并根据重试次数更改其 lockedUntill 并返回新文档。

例如: 如果:

  • 文档未锁定(task.lockedUntil:{$lt:
    now
    }),
  • 文档状态就绪(task.status:
    READY
    ) 而不是一些基于重试中的 Int 的开关,我将设置锁定直到。 例如
    {$eq: {$task.retries: 2}}
    config.secondLockedUntill

这是直接作用于数据库的查询。

`db.tasks.findOneAndUpdate({ "_id": ObjectId("bla") }, [{
    $set: {
        "task.lockedUntil": { 
            $switch: {
                branches: [
                    { case: { $eq: ["$task.retries", 1] }, then: "" },
                    { case: { $eq: ["$task.retries", 2] }, then: "READY2" },
                    { case: { $eq: ["$task.retries", 3] }, then: "READY3" },
                    { case: { $eq: ["$task.retries", 4] }, then: "READY4" },
                
                ],
            default: "default value"
            }
        }
    }
}])`

现在我想将其转换为 Scala 和响应式 Mongo 代码,但遇到了很多问题。 有时使用 js 解析,有时使用不支持聚合管道的反应式 mongo 运算符。

collection.findAndUpdate
不支持更新中的聚合管道
update.one
没有归还文件。

有什么想法吗?是可能的还是我必须将其拆分为多个操作?

mongodb scala mongodb-query reactivemongo play-reactivemongo
© www.soinside.com 2019 - 2024. All rights reserved.