programing

일반 개체를 mongoose 문서에 캐스팅

closeapi 2023. 7. 5. 20:44
반응형

일반 개체를 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()필드가 변형될 때까지 아무것도 하지 않습니다.

https://github.com/LearnBoost/mongoose/blob/41ea6010c4a84716aec7a5798c7c35ef21aa294f/lib/model.js#L1639-1657

데이터베이스에서 로드된 일반 JS 오브젝트를 몽구스 문서로 변환하는 데 사용됩니다.만약 당신이 REST 서비스나 그런 것으로부터 문서를 받고 있다면, 당신은 사용해야 합니다.findById()그리고.update().

위험하게 사는 사람들을 위해:

데이터베이스를 건드리지 않고 기존 문서를 업데이트하고 싶다면 전화를 걸어보세요.hydrate()필드를 더티로 표시한 다음 호출save()설정 방법과 크게 다르지 않습니다.doc.isNew = false;내가 원래 질문에서 제안한 바와 같이.하지만, 발레리(몽구스 팀의)는 이것을 하지 말 것을 제안했습니다.유효성 검사 오류 및 기타 에지 사례 문제가 발생할 수 있으며 일반적으로 좋은 방법은 아닙니다.FindById는 정말 빠르고 병목 현상이 되지 않습니다.

  1. 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);
});

  1. 다른 경우에는 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

반응형