2013-02-03 2 views
1

방금 ​​몽고를 배우기 시작했고 {} 컬렉션의 모든 문서를 참조했으며이 쿼리는 다음과 같을 것이라고 생각했습니다. db.foo.update({}, { $set: { letter : 'a' } }, { multi : true });은 컬렉션의 모든 문서를 업데이트합니다.간단한 몽고 쿼리

이런 경우에 내가 MongoDB shell version: 2.0.4

> for (i=0; i<3; i++) db.foo.insert({ num : i }); 
> db.foo.find() 
{ "_id" : ObjectId("510debe5ccc97edd4aca03dc"), "num" : 0 } 
{ "_id" : ObjectId("510debe5ccc97edd4aca03dd"), "num" : 1 } 
{ "_id" : ObjectId("510debe5ccc97edd4aca03de"), "num" : 2 } 
> db.foo.update({}, { $set: { letter : 'a' } }, { multi : true }); 
> db.foo.find() 
{ "_id" : ObjectId("510debe5ccc97edd4aca03dd"), "num" : 1 } 
{ "_id" : ObjectId("510debe5ccc97edd4aca03de"), "num" : 2 } 
{ "_id" : ObjectId("510debe5ccc97edd4aca03dc"), "letter" : "a", "num" : 0 } 

답변

3

라인

을 사용하고
db.foo.update({}, { $set: { letter : 'a' } }, { multi : true }); 

당신이 생각하지 않습니다!

update의 세 번째 인수는 업데이트가 업다운인지 여부입니다. 세 번째 주장이 진실이라면, 당신은 업서 트를합니다. 위증이라면 당신은하지 않습니다. 당신은 진실 인 대상 ({multi: true})을 전달 했으므로 업서 트를하고 있습니다.

네 번째 인수가 다중입니다. 네 번째 인수를 제공하지 않았고 JavaScript에서는 이것이 정의되지 않았 음을 의미합니다. 이는 위증적이므로 쿼리가 다중을 수행하지 않습니다!

db.foo.update({}, { $set: { letter : 'a' } }, false, true); 

이 자바 스크립트에서 멀티 업데이 트를 만드는 방법입니다

당신이 작성하는 것을 의미했다.

+0

대단히 감사합니다! 그게 아주 도움이 되네. – Vor

+3

@Vor : 아마도 2.2를 사용하지 않았을 것입니다. 쉘 인터페이스에 변화가있었습니다 : [ "mongo 쉘에서 upsert와 multi는 위치 적 부울 옵션이었습니다"] (http : // docs.mongodb.org/manual/reference/method/db.collection.update/#db.collection.update) –

+0

@muistooshort +1 ... 그리고 집계 프레임 워크가 없습니다! 그날이 .... –