2016-11-13 5 views
0

속성 유형을 변경 한 후 어떤 요소를 찾을 수 없습니다 :몽구스 내가 원래이 두 스키마가

var UserSchema = new Schema({ 
    first: String, 
    last: String 
}); 

var SaleSchema = new Schema({ 
    createdAt: Date, 
    registeredBy: { type: Schema.ObjectId, ref: 'User' } 
}); 

을하지만 대신에 ID의 사용자 이름을 저장하는 내 SaleSchema을 편집하려면, 그래서 그것을 변경 :

var SaleSchema = new Schema({ 
    createdAt: Date, 
    registeredBy: String 
}); 

다음, 나는 모든 판매 문서를 편집하고 사용자의 전체 이름을하고 등록한의 사용자 ID를 대체 할 싶었지만 기존 ID 년대의 find 쿼리를 수행 할 수없는 것.

길고도 짧은 이야기,이 쿼리는 몽구스에는 일치를 반환하지 않습니다,하지만 몽고 콘솔을 사용하여 완벽하게 작동합니다 :

Sale.find({ registeredBy: '57ea0cbb47431f0b43b87d42' }) 
    .then(results => res.json(results)) 
    .catch(err => res.status(500).json(err)); 
// result: [] 

MongoDB를 콘솔

db.sales.find({ registeredBy: '57ea0cbb47431f0b43b87d42' }) 
// result: 8 elements 

내가 수정 한 후

몽구스를 내 스키마의 속성을 다시 ObjectId로 변경하면 몽구스 쿼리가 다시 작동합니다. 새 데이터 유형으로 마이 그 레이션해야하기 때문에 두 가지 유형의 값을 쿼리하고 저장할 수 있기를 원합니다. 이것이 가능한가?

답변

1

좋은 질문 이것은 복잡한 가장자리 경우입니다. 나는 특별히 Mongoose에 익숙하지 않지만, 이것을하기위한 한 가지 방법은 낮은 수준에서 데이터를 마이그레이션하는 것입니다.

db.sales.find().forEach(function(doc){ 
    var user = db.users.find({ _id: doc.registeredBy }); 
    db.sales.update({ _id: doc._id, }, { 
    $set: { registeredBy: user.first + ' ' + user.last } 
    }); 
}); 

https://github.com/balmasi/migrate-mongoose 같은 모듈이 무엇 비슷하지만, 나는 개인적으로 발견했습니다 : 예를 들어,의 라인을 따라 뭔가를 마이그레이션을 수행 할 낮은 수준의 몽고의 API를 사용하는 몽고 스크립트를 만들 mongo 스크립트를 cli에서 직접 사용하는 것이 더 쉽습니다.

mongo < sale-schema-migration.js 
관련 문제