2017-03-09 1 views
0

내 모델의 새 필드로 내 컬렉션의 모든 문서를 업데이트하려고합니다. 이 필드는 boolean이며 기본값은 false입니다.새로운 필드가있는 몽구스 모델 업데이트

이 질문은 이미 이전에 물어 왔지만 여전히 내 문제에 대한 해결책을 얻을 수 없다는 것을 알고 있습니다.

모든 것이 작동하지 않습니다.

내가 뭘하려에 대한 예는 여기를

: 나는 변화하고 싶지 않기 때문에 그냥 내가 추가 한 필드를 추가, 모든 문서, 빈 $ 세트를 업데이트 할 -cause 빈 쿼리를 가지고 업데이트 방법 내 모델

User.update({},{},{multi: true},function(err,num) { 
    if (err){ 
    console.log(err); 
    } 
    console.log(num); 
    console.log("all documents were updated with new field) 
    }) 

또 다른 시도 :

User.find({},function (err,docs) { 
      async.each(docs,function (doc,cb) { 
       doc.save(function (err) { 
       console.log(err); 
       cb(); 
       }) 
      },function() { 
      console.log("all documents were saved with new field) 
      }) 
     }) 

어떤 제안이?

+0

Mongoose는 데이터베이스의 어떤 문서가 해당 필드를 이미 가지고있을 수도 있고 가지지 않을 수도 있기 때문에 모름이 어떤 문서를 모르는지 알기 때문에 (아마도 기본값으로) $ set에 업데이트를 명시 적으로 추가해야합니다 그것은 기본 (비록 그것이 더 쉽습 수도/빠른 Mongo 쉘에서 업데이트 작업을 실행할 수 있습니다) – robertklep

답변

1

몽구스는 필드에 undefined 값을 설정할 수 없습니다. 이 필드는 문서에 없습니다. 몽구스에게 무언가를 전달하여 새 필드의 값으로 설정해야합니다.

User.update({},{$set: {newField: ''}}......) 

또는 null - -

그래서 당신은 빈 문자열 설정할 수

User.update({},{$set: {newField: null}}.....) 

을하지만 당신은 몽구스가 문서로 설정하기 위해 일부 값을 제공해야합니다. 몽구스 문서에서

- -

편집 기본적으로

은, 몽구스은 당신이 새 문서를 만들 기본값을 적용합니다. update() 및 findOneAndUpdate()를 사용하면 기본값을 설정하지 않습니다. 그러나 mongoose 4.x를 사용하면 setDefaultsOnInsert 옵션을 사용하여이 동작을 선택할 수 있습니다.

자세한 내용은 here을 참조하십시오.

+0

내가이 일을 할 수 있지만, 그것은 내게 유용하지 않다는 것을 알고있다 나는 일반 스크립트를 작성해야합니다 내 모델에 새 필드를 추가 할 때마다 실행됩니다. – masterG

+0

그리고 모델에 기본값이 있으면 mongoose가 정의되지 않은 값을 저장하려고합니까? – masterG

+0

@masterG 죄송합니다. 귀하 께서 기본값을 주셨다는 것을 알지 못했습니다. 제 수정 된 답변을 확인하십시오. –