我有一个 mongodb 任务集合,文档如下:
id: objId
retries: Int
status: String
lockedUntill : ISO time
retries 可以是 1 到 10 的整数 状态可以是:
READY
, AWAIT
, FAILED
, DONE
, 等等..
我正在使用 scala 和 reactive mongo,我想在状态下一次搜索 1 个文档
READY
并根据重试次数更改其 lockedUntill 并返回新文档。
例如: 如果:
now
}),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
没有归还文件。
有什么想法吗?是可能的还是我必须将其拆分为多个操作?