2014-04-03 11 views
1

mongoose를 사용하여 mongo 데이터베이스에서 일부 문서의 모든 개정판을 추적하려고합니다. 이런 이유로 나는 플러그 접속 식 몽구스 버전으로 가기로 결정했다.mongoose 및 mongoose-version을 사용하여 항목을 업데이트 할 때 새 버전

새 문서를 만들고 데이터베이스에 추가하면 버전이 다른 버전을 저장하는 컬렉션에 유지된다는 것을 알 수 있습니다. 그러나 새 문서로 업데이트 할 때 문서를 저장하는 컬렉션 (최신 버전)에서는 변경 내용을 볼 수 있지만 버전 관리 데이터베이스에 저장된 새 버전은 볼 수 없습니다. 이것이 일어날 수있는 단서가 있습니까? ,

User.create({ 
    name  : request.body.FullName, 
    username : request.body.UserName, 
    email  : request.body.Email, 
    modifiedOn: Date.now() 
}, function (err, user) { 
    if (err) { 
     console.log(err); 
     if (err.code === 11000) { 
      response.redirect('/users/new?exists=true'); 
     } 
     else { 
      response.send("Error while creating new user. The error code was " + err.code + " and the entire error " + err); 
      //response.redirect('users/new?error=true'); 
     } 
    } 
    else { 
     console.log("User created and saved: " + user); 
     response.redirect('/users/' + user.username); 
    } 
}); 

그리고 이것이 내가 기본적으로 이름 만 변경할 수 있습니다 (사용자의 정보를 업데이트하는 방법입니다

var userSchema = new mongoose.Schema({ 
    name  : String, 
    username : { 'type': String, 'unique': true }, 
    email  : { 'type': String, 'unique': true }, 
    createdOn : { 'type': Date, 'default': Date.now }, 
    modifiedOn: { 'type': Date, 'default': Date.now } 
}); 

mongoose.model('User', userSchema, 'users'); 

// Versioning options 
var userVersioningOptions = { 
    collection: 'versionedUsers', 
    logError: true, 
    suppressVersionIncrement: true,  // default value 
    strategy: 'array', 
    removeVersions: false    // default value 
}; 

userSchema.plugin(version, userVersioningOptions); 

이 내가 사용자를 만드는 방법은 다음과 같습니다

이 내 스키마입니다 하지만 내가 배우는 것처럼 데모 목적을위한 것입니다.)

User.update(
    {username: newDetails.username}, 
    {$set: {name: newDetails.name, modifiedOn: Date.now()}}, 
    {upsert: false, multi: true}, 
    function (err, numAffected) { 
     if (err) 
      throw err; 
     console.log("The error was " + err); 
     console.log("Updated " + numAffected + " documents"); 
     response.send({}, 200); 
    } 
); 

나는 또한 몽구스와 몽구스를 사용하는 초보자이기 때문에 도움이나 힌트를 많이 주시면 감사하겠습니다.

+0

행운이 하나? –

+0

예. 나는 처음부터 의도 한 컬렉션을 사용하여 내 자신의 버전을 만들었습니다. 먼저, 컬렉션의 문서에 _revision이라는 속성을 추가했습니다. 그런 다음 내 코드에서 새 버전을 DB에 쓸 때마다이 값을 1 씩 증가시킵니다. 그런 다음 본질적으로 repo를 복제했고,'collection.js' 파일 (약 4-5 줄의 코드)에서 코드를 약간 수정/추가했습니다. 트릭은 오브젝트 ID가 무작위 (기본값)이고'_revision' 속성을 통해 적절한 버전을 참조하도록 복제 스키마를 만드는 것이 었습니다. – MightyMouse

+0

그래서 복제 된 스키마는 문자 그대로 내가 저장하고 있던 최신 버전의 문서 사본이었습니다. 따라서 콘텐트를 수정하지 않았으므로주의를 기울여야하거나 돌보아야 할 실질적인 문제는 없었습니다. 복제하는 중이었습니다. https://github.com/saintedlama/mongoose-version/issues/9 – MightyMouse

답변

0

mongoose-version은 현재 업데이트 (https://github.com/saintedlama/mongoose-version/issues/25)를 지원하지 않습니다. 그 이유는 몽구스의 저장 대 업데이트의 성격 때문입니다 (고리가 없었습니다). 나는 mongoose가 지금 갱신을 위해 갈고리를 가지고 있다고 믿지만 몽구스 - 버전은 이것을 위해 업데이트되지 않았다.

대안으로 모든 oplog를 저장하는 것이 좋습니다. 유스 케이스에 따라 다르지만 설치/유지 관리가 가장 쉽고 누락 된 변경 사항에 대한 가장자리 사례가 훨씬 적어야합니다.

나는 제안을 할 수 없다. 그것의 출처 : http://www.askasya.com/post/bestversion/