【发布时间】:2022-01-19 18:25:08
【问题描述】:
假设您正在制作一个简单的待办事项应用程序,并且您的结构如下所示:
{
[userId]: {
nextTaskId:3,
tasks: {
1: "take out the trash",
2: "pick up milk"
}
}
添加任务时,我想使用 nextTaskId 创建一个新记录并增加它。我见过其他使用聚合函数(如 $concat 等)的示例,但这不适合我的用例。
我希望能够在我的更新中引用该字段,例如:
db.tasks.updateOne({_id:5}, {$inc:{nextId:1}, $set: {"tasks.$nextId":{"new task" }}})
该字段确实增加了,但任务键不是 3,而是 $nextId,我也尝试将其用作值,如下所示:
db.tasks.updateOne({_id:5}, {$inc:{nextId:1}, $set: {"tasks.3":{"$nextId" }}})
这也不起作用。当然,我可以通过 2 个单独的操作来做到这一点,一个是获取下一个 id 并增加它,另一个是创建新的任务记录,但我希望通过一个操作来完成。
有什么想法吗?
【问题讨论】:
-
如果您能提供一个具体的 JSON 示例,将会很有帮助。从您的示例中,您似乎正在使用动态值作为字段名称,这通常被认为是一种反模式,建议尽可能重构您的架构。
-
感谢您阅读问题和反馈。关于具体的 JSON 示例。我在上面有它,我没有输入 BSON 记录 ID,而是将其标记为 [userId]。后来,我有了示例查询,它们是普通的 mongosh 语法。更清楚地说,基本上我试图在我的更新中引用当前记录值,而不必执行两个单独的操作。这是针对并发问题以及性能问题。我已经看到使用聚合 fcns 完成此操作,例如使用 $concate (即全名字段是第一个和最后一个的连接)。
标签: node.js mongodb mongodb-query