2012-12-12 2 views
0

새 값이 레코드의 다른 필드 값에 따라 달라지는 mongodb 레코드를 업데이트해야합니다.필드 값에 따라 1 쿼리에서 2 개의 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' 

결과는 다음과 같습니다이 2에서 수행 할 수

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

다음과 같이 쿼리를 업데이트하지만 1에서 수행하려고합니다.

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

코드는 Java로 작성되었습니다.

답변

1

MongoDB에는 SQL 자체의 case 능력처럼 이것을 수행 할 수있는 내부 case 문이 없습니다. 당신이 더 제공 if 문을 수행한다

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

:

따라서 당신은 그러나 당신의 라인을 따라 더 할 수 있도록 후자의 쿼리를 변경할 수 있습니다 개별적으로 각을 수행해야합니다.

+0

내가 [$ in : [2, 4]를 가졌던 유일한 이유는 [2, 4]가 [1, 3, 5]의 보완이 될 필요가 없다는 것입니다. 그것은 단지 [2] 일 수 있습니다. – ben39

+0

가능한 경우 $ nin 또는 임의의 부정 연산자를 사용하지 않는 것이 좋습니다. –

+1

@RaxitSheth 부울 오퍼레이터가 여전히 덮여있는 인덱스를 사용할 수있는 부울 또는 낮은 선택 필드를 무효화하지 않는다면 부정 속성을 사용하는 것이 좋습니다. – Sammaye

관련 문제