根据字段值在1个查询中运行2个mongodb更新

时间:2012-12-12 21:19:46

标签: java mongodb mongodb-query mongodb-update

我需要更新mongodb中的记录,其中新值取决于记录中另一个字段的值。

例如给出以下集合

{id: 1, list: []}
{id: 2, list: [6]}
{id: 3, list: []}
{id: 4, list: [6]}
{id: 5, list: []}

我希望能够说:

if ('id' is in [1, 3, 5]) => add the value '6' to 'list'
else => remove the value '6' from 'list'

结果将是:

{id: 1, list: [6]}
{id: 2, list: []}
{id: 3, list: [6]}
{id: 4, list: []}
{id: 5, list: [6]}

这可以在2个更新查询中完成,如下所示,但我尝试在1中执行:

db.collection.update({$in: [1, 3, 5]}, {$addToSet: {list: 6}})
db.collection.update({$in: [2, 4]}, {$pull: {list: 6}})

代码是Java。

1 个答案:

答案 0 :(得分:1)

MongoDB目前还没有内部案例声明,这样就可以像在SQL自己的case能力中那样执行此操作。

因此,您需要单独执行每个操作,但是您可以将后一个查询更改为:

db.collection.update({$nin: [1, 3, 5]}, {$pull: {list: 6}})

这应该完成您提供的if声明。