【问题标题】:Update multi documents in mongodb更新 mongodb 中的多个文档
【发布时间】:2019-05-22 12:54:33
【问题描述】:

我在schedule collection 中有一个特定用户 的 3 个项目,并且在每个记录(文档)中,我都有字段 isActive,user 将设置为当他想在那个项目上工作时为真,并且只能为一个项目设置。见以下记录:

{
    "_id" : ObjectId("5c1e0a1cd8a20917b8564e49"),
    "isActive" : true,
    "projectId" : ObjectId("5c0a2a8897e71a0d28b910ac"),
    "userId" : ObjectId("5c0a29e597e71a0d28b910aa"),
    "hours" : 1,
},
{
    "_id" : ObjectId("5c1e0a1cd8a20917b8564e4a"),
    "isActive" : false,
    "projectId" : ObjectId("5c188a9959f6cf1258f4cb01"),
    "userId" : ObjectId("5c0a29e597e71a0d28b910aa"),
    "hours" : 7,
},
{
    "_id" : ObjectId("5c1e0a1cd8a20917b8564e4b"),
    "isActive" : false,
    "projectId" : ObjectId("5cyt2a7797e71a0d25b930ad"),
    "userId" : ObjectId("5c0a29e597e71a0d28b910aa"),
    "hours" : 1,
}

例如,用户已经为5c0a2a8897e71a0d28b910ac这个projectId完成了他的工作。现在他想为5c188a9959f6cf1258f4cb01 projectId 工作,所以我想编写更新查询以将5c188a9959f6cf1258f4cb01 projectId 的isActive 更新为true,将5c0a2a8897e71a0d28b910ac5cyt2a7797e71a0d25b930ad 项目的isActive 更新为false,表示用户其他项目。

【问题讨论】:

  • 我实际上不明白。 particular projectIduser projects 是什么意思
  • 想要针对所有用户记录将特定项目的 isActive 键更新为 true。
  • @test 不清楚你在这里问什么
  • @AnthonyWinzlet,我在计划集合中有 3 条用户记录。每条记录都包含用户必须在哪个项目上工作以及工作了多少小时。现在完成一个项目的时间,用户想要打开另一个项目。所以我要问,我想从该记录中将特定 projectId 的 isActive 更新为 true,并将其余项目的 isActive 更新为 false。
  • @AnthonyWinzlet,如果您还不清楚,请再次询问我。

标签: mongodb


【解决方案1】:

所以基本上你必须使用两个查询一个到$set isActivefalse 和一个到$set isActivetrue 一个特定的userId

1) 将isActive 设置为true

Model.update(
  { "projectId": "5c188a9959f6cf1258f4cb01", "userId": "5c0a29e597e71a0d28b910aa" },
  { "$set": { "isActive": true }}
)

2) 到$set isActive 到false 其他projectId 相同userId

Model.update(
  { "projectId": { "$ne": "5c188a9959f6cf1258f4cb01" }, "userId": "5c0a29e597e71a0d28b910aa" },
  { "$set": { "isActive": false }}
)

【讨论】:

  • 我应该在第一次更新查询响应后使用第二次更新查询吗?
  • 没关系:-)
  • 非常感谢。我会测试它并让你知道:-)
  • 你好@Anthony,我不能只用一个更新条件来做上面的事情吗?我们可以用 $cond 和 $set 来做吗?
  • 不。大多数人都有相同的问题,但在此之前,单个查询是不可能的。
猜你喜欢
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
相关资源
最近更新 更多