2014-05-20 3 views
0

이 코드는 MongoDB 컬렉션의 모든 문서를 대량으로 변경하기위한 것입니다. 그러나이 코드를 실행 한 후에는 콜렉션의 문서에 전혀 변경이 없습니다. 그게 뭐가 잘못 되었 니?MongoDB 문서 변경 사항이 저장되지 않는 이유는 무엇입니까?

var mongoose = require('mongoose'), 
    async = require('async'), 
    Person = require('../../model/Person'); 

mongoose.connect('mongodb://localhost/people-questions'); 
var db = mongoose.connection; 
db.on('error', console.error.bind(console, 'connection error:')); 

Person.find(function (err, people) { 
    if (err) return console.error(err); 

    //download bio info 
    async.each(people, function(person, callback) { 
     person.birthdateYear = '01'; 
     person.save(); 
     callback(); 
    }); 

    mongoose.connection.close(); 
}); 

이 터미널에서 열린 몽고 CLI 인스턴스를 떠나 필드가 전혀 업데이트되지 볼 db.people.find();를 실행하여 만든 변경은 없습니다 또한 확인하기 위해 특정 ID를 참조, db.people.find({ "_id" : ObjectId("5379e6e21fe1e8e2fc364d17")}); 같은 쿼리하는 내가 확인한 내 자바 스크립트 코드가 실제로 올바른 데이터베이스에 연결되어 있고 올바른 컬렉션 (해당 ID가 동일한 연결 세부 정보를 사용하여 이전 문서 ID에서 문서 ID를 인쇄 한 것)를 사용하고 있습니다.

또한 몽구스를 사용하고 있습니다. Mongoose 스키마는 원래 문서가 작성된 후 birthdateYear와 같은 추가 필드를 포함하도록 업데이트되었지만 이미 수행 한 검색 및 Mongo Docs 읽기에서 스키마 변경은 특별한 작업이 필요하지 않아야합니다. 속성을 설정할 수 있습니다 바로 업데이트 된 스키마가있는 문서에 대해 (어쨌든 가능할 수 있어야합니다).

답변

1

다음은 업데이트가 유지되지 않습니다 이유 저장() 콜백을 완료 할 수있는 기회를하기 전에 MongoDB를로의 연결이 닫혀 있다는 것입니다 같은 것을 시도 비동기 기능 입니다. 연결을 닫기 전에 모든 save() 콜백을 완료하면 데이터가 저장됩니다.

0

person.save는

person.save (function(err){ 
    if(err) console.log(err); 
    callback(); 
}); 
+0

이렇게해도 문제가 해결되지 않았습니다. 또한 save()에 대한 콜백은 선택 사항입니다. – Trindaz

관련 문제