2014-09-08 6 views
0

나는 내 컬렉션에 같은 개체가 :배열 MongoDB의 객체에서 문자열을 제거

내가 bar.tags 분야에서 links 값을 포함하는 모든 객체에서 foo.actions에서 delete 값을 제거 할
{ 
    "foo": { 
     "actions": [ 
      ..., 
      "delete" 
     ] 
    }, 
    "bar": { 
     "tags": ["links", ...] 
    } 
} 

.

> db.foo.find({"bar.tags": /links/, "foo.actions": /delete/}).count() 
786 

여기에 문제의 새로운 기능 : 다음과 같은 요청이 0를 반환하지 않기 때문에

db.foo.update({ 
    "bar.tags": /links/ 
}, { 
    $pull: { 
     "foo.actions": "delete" 
    } 
}, { 
    multi: true 
}); 

delete 필드가 제거되지 않습니다 :

나는 작동하지 않을 것 같다 기본 업데이 트를하려고 노력 ? 왜 delete 값이 제거되지 않습니까?

+1

나는 그것을 시도 할 때 잘했다. – JohnnyHK

+0

@JohnnyHK'tags'는 다른 객체 안에 있습니다. 어쩌면 그 차이가 있을까요? –

답변

1

그것은 나를 위해 일했습니다. 어쩌면 당신은 올바른 컬렉션을 부르지 않을 것입니다. 업데이트 전후의 수를 인쇄하여 차이가 있는지 확인하십시오.

예 :

db.foo.find({"bar.tags": /links/, "foo.actions": /delete/}).count() // 4 
db.foo.update({ 
    "bar.tags": /links/ 
}, { 
    $pull: { 
     "foo.actions": "delete" 
    } 
}, { 
    multi: true 
}); 
db.foo.find({"bar.tags": /links/, "foo.actions": /delete/}).count() // 0 

설정

var createObj = function(){ 
    var o = { 
    "foo": { 
     "actions": [ 
      "ok" 
     ] 
    }, 
    "bar": { 
     "tags": ["links"] 
    } 
    } 
    if(Math.random() < 0.5){ 
    o.foo.actions.push("delete"); 
    o.foo.actions.push("delete"); 
    o.foo.actions.push("delete"); 
    } 
    return o; 
}; 
use test; 
db.foo.drop(); 
for(var i = 0; i < 10; i++){ 
    db.foo.insert(createObj()); 
} 
+0

db.foo.update ({ "bar.tags": "links", "foo.actions": "delete"}, { "$ pull": { "foo.actions": "delete" }}, {multi : true})'노동자를 완벽하게. 어쨌든 훌륭한 답변에 감사드립니다! –

+0

'foo.actions'에'deleteImage' 필드가있어서 문제가 생겼습니다. 내가'foo.actions :/delete /'를 계산할 때 그들은 잡히게되었다. 이 정보로 답을 업데이트 해주십시오. 미래의 사용자에게 유용 할 수 있습니다. –

+0

다음에 정규식 대신 문자열을 사용하고자 할 수 있습니다. '/ delete /'는'delete'라는 단어뿐만 아니라'delete'를 포함하는 단어와 일치하기 때문입니다. '/^delete $ /'는''delete ''와 같습니다. –