0

我需要更新 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 中的。

4

1 回答 1

1

MongoDB 目前还没有内部 case 语句,它允许您像 SQL 自己的case能力一样执行此操作。

因此,您需要分别执行每个操作,但是您可以将后一个查询更改为更符合以下要求:

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

那应该可以if更好地完成您提供的陈述。

于 2012-12-12T22:06:32.673 回答