나는 Mongoose에서 정의 된 스키마를 가지고 있으며 하나의 속성이 객체 (해시의 종류)로 저장되고 있음을 알았지 만, 금지 된 문자를 키에 포함 할 수 있습니다. 금지 된 의미는 MongoDB가별로 좋아하지 않아서 도트, 달러 기호 등 not okForStorage
오류가 발생하는 것을 의미합니다."okForStorage가 아닌"것을 피하기 위해 Mongoose를 사용하여 MongoDB에 저장하기 위해 데이터를 다시 포맷하는 방법은 무엇입니까?
내 응용 프로그램을 모두 변경하고 싶지는 않지만 내 모델에 무언가를 정의하고 싶습니다. MongoDB에 전달하기 전에 객체를 배열로 다시 포맷하며 물론 MongoDB에서 이러한 데이터를로드 할 때 객체를 다시 포맷해야합니다.
나는 getters와 setters를 시도하고 Middleware으로 잠시 재생했지만 제대로 작동하지 못했습니다. 이것에 대한 모범 사례가 있습니까? 최선의 접근 방법은 무엇입니까? 정말 어딘가에 스키마에 어딘가에 두 가지 기능을 스틱 수 있고 그것은 내 애플 리케이션의 나머지 부분에 대한 순수 블랙 박스 것입니다.
업데이트 : (예)를 달성하려면 무엇 :
toMongo = function (mapping) {
// from {'k': 'v', ...} makes [{key: 'k', value: 'v'}, ...]
return ...
}
fromMongo = function (mapping) {
// from [{key: 'k', value: 'v'}, ...] makes {'k': 'v', ...}
return ...
}
schema = mongoose.Schema({
mapping: mongoose.Schema.Types.Mixed
});
var Foo = mongoose.model('Foo', schema);
var foo = new Foo({ mapping: {'tricky.key': 'yes', 'another$key': 'no'} });
foo.mapping // results in {'tricky.key': 'yes', 'another$key': 'no'}
foo.save(function(err, doc) {
// mapping is actually saved as
// [{key: 'tricky.key', value: 'yes'}, {key: 'another$key', value: 'no'}] in mongo!
doc.mapping // results in {'tricky.key': 'yes', 'another$key': 'no'}
});
Foo.find(function (err, foos) {
foos[0].mapping // results in {'tricky.key': 'yes', 'another$key': 'no'}
});
질문은 : 나는 예와 같이 내가이 개 마법 기능 toMongo
및 fromMongo
그래서 인터페이스가 정확하게 작동 후크해야 어디?
(면책 조항 :이 질문의 시간이 요구되고, 나는이 몽구스 & Node.js를의 멍청한 놈, 그래서 심지어 바보 세부 사항이 나에게 도움이 될 수있는) 내가 답을 찾을 자신을 생각
모델의 문서 인스턴스에 값을 전달하기 전에 여기에서 값을 "미리 구문 분석"할 수 있습니다. 당신은 거기에있는 잘못된 문자의 종류에 좀 더 구체적 일 수 있습니다. 확실하게'$'와'.'는 당연합니다. 그러나 당신의 질문은 당신이하려고하는 것의 표본으로부터 유익을 얻을 것입니다. –
제 질문을 더 명확하게하기 위해 예제를 추가했습니다. –