일반 개체를 mongoose 문서에 캐스팅
업데이트 1: 5표가 접수되어 기능 요청을 제출했습니다. https://github.com/LearnBoost/mongoose/issues/2637
이 기능을 원하는 핵심 팀에게 +1 표를 행사하십시오.
업데이트 2: 아래 답변 참조...
원본 게시물:
예를 들어 컬렉션에 대해 "최소" 쿼리를 수행하거나 REST 서비스에서 일부 데이터를 수신하면 개체 배열(mongoose 문서가 아님)을 수신합니다.
이러한 오브젝트는 이미 데이터베이스에 있지만 개별적인 편집/저장을 위해 오브젝트의 일부/전체를 mongoose 문서로 변환해야 합니다.
출처를 읽어보니 몽구스가 데이터베이스의 데이터(채우기, 캐스팅, 초기화 등)를 가지고 있으면 많은 일이 벌어지고 있지만, 이를 외부에 '노출'하는 방법은 없는 것 같습니다.
저는 다음을 사용하고 있습니다만, 그냥 해학적으로 보입니다 ($data
일반 개체임):
// What other properties am I not setting? Is this enough?
var doc = new MyModel( $data );
doc.isNew = false;
// mimicking mongoose internals
// "init" is called internally after a document is loaded from the database
// This method is not documented, but seems like the most "proper" way to do this.
var doc = new MyModel( undefined );
doc.init( $data );
업데이트: 더 검색해 본 결과, 아직 이를 위한 방법은 없는 것 같고, 위의 첫 번째 방법은 최선의 방법입니다(mongoose v3.8.8).다른 사람이 관심이 있다면 다음과 같은 기능을 요청하겠습니다(댓글이나 업데이트 부탁드립니다).
var doc = MyModel.hydrate( $data );
이 메시지가 계속 열려 있지 않도록 내 답변을 게시하는 중:
버전 4 모델(2015-03-25에서 안정적으로 출시)은 이제 방법을 공개합니다.처음에는 어떤 필드도 더티로 표시되지 않습니다. 즉, 다음에 대한 호출을 의미합니다.save()
필드가 변형될 때까지 아무것도 하지 않습니다.
데이터베이스에서 로드된 일반 JS 오브젝트를 몽구스 문서로 변환하는 데 사용됩니다.만약 당신이 REST 서비스나 그런 것으로부터 문서를 받고 있다면, 당신은 사용해야 합니다.findById()
그리고.update()
.
위험하게 사는 사람들을 위해:
데이터베이스를 건드리지 않고 기존 문서를 업데이트하고 싶다면 전화를 걸어보세요.hydrate()
필드를 더티로 표시한 다음 호출save()
설정 방법과 크게 다르지 않습니다.doc.isNew = false;
내가 원래 질문에서 제안한 바와 같이.하지만, 발레리(몽구스 팀의)는 이것을 하지 말 것을 제안했습니다.유효성 검사 오류 및 기타 에지 사례 문제가 발생할 수 있으며 일반적으로 좋은 방법은 아닙니다.FindById는 정말 빠르고 병목 현상이 되지 않습니다.
- REST 서비스로부터 응답을 받고 있으며 사용자 몽구스 모델이 있다고 말하는 경우
var User = mongoose.model('User');
var fields = res.body; //Response JSON
var newUser = new User(fields);
newUser.save(function(err,resource){
console.log(resource);
});
- 다른 경우에는 User.find()의 사용자 JSON 개체 배열을 쿼리하거나 채울 수 있습니다.
var query = User.find({});
query.exec(function(users){
//mongoose deep-populate ref docs
User.deeppopulate users 'email_id phone_number'.exec({
//query through populated users objects
});
});
MongoDB는 가입 및 전송을 지원하지 않습니다.따라서 현재로서는 개체에 직접 값을 캐스팅할 수 없습니다.하지만 당신은 각각을 위해 그것을 해결할 수 있습니다.
언급URL : https://stackoverflow.com/questions/24190478/cast-plain-object-to-mongoose-document
'programing' 카테고리의 다른 글
MVC4에서 BundleCollection이 캐시된 스크립트 번들을 강제로 플러시하는 방법 (0) | 2023.07.05 |
---|---|
유성 업서트 사용 방법 (0) | 2023.07.05 |
일부 JSON 파일을 Spring Boot 응용 프로그램에 로드하는 가장 좋은 방법 (0) | 2023.07.05 |
특정 IP 범위의 입력 IP 하한을 확인하는 방법 (0) | 2023.07.05 |
MongoDB에서 _id 유형을 정수로 변경하는 것이 나쁜가요? (0) | 2023.07.05 |