복붙노트

[MONGODB] 문서에서 일부 필드를 제외하는 방법

MONGODB

문서에서 일부 필드를 제외하는 방법

나는 다음과 같은 간단한 스키마를 가지고 :

 var userSchema = new Schema({
    name : String,
   age: Number,
   _creator: Schema.ObjectId
  });

  var User = mongoose.model('User',userSchema);

내가 뭘 원하는 새 문서 및 클라이언트에 반환을 만드는 것입니다,하지만 난 하나에서 '창조자'필드를 제외 할 :

app.post('/example.json', function (req, res) {
   var user = new User({name: 'John', age: 45, _creator: 'some ObjectId'});
   user.save(function (err) {
      if (err) throw err;

      res.json(200, {user: user});     // how to exclude the _creator field?
   });
});

마지막에 나는 _creator 필드 않고 새 만든 사용자를 보낼 :

{
   name: 'John',
   age: 45
} 

그것은 몽구스 여분 찾기 요청없이 만들 수 있습니까?

P.S : 그것은으로 그것을 확인하는 것이 바람직입니다

해결법

  1. ==============================

    1.스키마 수준에이를 처리하는 또 다른 방법은 모델 toJSON을 무시하는 것입니다.

    스키마 수준에이를 처리하는 또 다른 방법은 모델 toJSON을 무시하는 것입니다.

    UserSchema.methods.toJSON = function() {
      var obj = this.toObject()
      delete obj.passwordHash
      return obj
    }
    

    난 내가 클라이언트에 봉사 JSON에서 암호 해시를 제외하고 선택하는 방법을 찾고이 질문에 건너 온 : 그것은 전혀 데이터베이스에서 값을 검색하지 않았기 때문에 거짓 내 verifyPassword 기능을 끊었다.

  2. ==============================

    2.문서화 된 방법은

    문서화 된 방법은

    UserSchema.set('toJSON', {
        transform: function(doc, ret, options) {
            delete ret.password;
            return ret;
        }
    });
    

    UPDATE - 당신은 화이트리스트를 사용 할 수 있습니다 :

    UserSchema.set('toJSON', {
        transform: function(doc, ret, options) {
            var retJson = {
                email: ret.email,
                registered: ret.registered,
                modified: ret.modified
            };
            return retJson;
        }
    });
    
  3. ==============================

    3.내가 pymongo와 비슷한 답을 찾으려고 할 때 질문을 가로 질러 가자. 그것은 찾기 () 함수 호출과 몽고 쉘, 당신은 어떤 방법 결과 문서의 모양과 같은 지정하는 두 번째 매개 변수를 전달할 수있는 것으로 나타났다. 이 속성의 값이 0 인과 사전을 통과하면, 당신은이 쿼리 나올 모든 문서에서이 분야를 제외한다.

    내가 pymongo와 비슷한 답을 찾으려고 할 때 질문을 가로 질러 가자. 그것은 찾기 () 함수 호출과 몽고 쉘, 당신은 어떤 방법 결과 문서의 모양과 같은 지정하는 두 번째 매개 변수를 전달할 수있는 것으로 나타났다. 이 속성의 값이 0 인과 사전을 통과하면, 당신은이 쿼리 나올 모든 문서에서이 분야를 제외한다.

    귀하의 경우에는, 예를 들어, 쿼리는 같은 것입니다 :

    db.user.find({an_attr: a_value}, {_creator: 0});
    

    그것은 당신을 위해 _creator 매개 변수를 제외됩니다.

    pymongo에서 찾기 () 함수는 거의 동일합니다. 확실하지가 생각 몽구스 번역 방법에 대해 설명합니다. 나는 그것이 나중에 수동으로 필드를 삭제 비교해 더 나은 솔루션 생각합니다.

    희망이 도움이.

  4. ==============================

    4.당신은 당신이 자유롭게 수정할 수있는 일반 JS 객체로 변환 할 문서에 toObject ()를 호출 할 수 있습니다 :

    당신은 당신이 자유롭게 수정할 수있는 일반 JS 객체로 변환 할 문서에 toObject ()를 호출 할 수 있습니다 :

    user = user.toObject();
    delete user._creator;
    res.json(200, {user: user});
    
  5. ==============================

    5.나는 (유틸리티 .pick lodash 사용) 또는 것

    나는 (유틸리티 .pick lodash 사용) 또는 것

  6. ==============================

    6.MongoDB의 문서를 다음, 당신은 같은 쿼리에 두 번째 매개 변수를 전달하여 필드를 제외 할 수 있습니다 :

    MongoDB의 문서를 다음, 당신은 같은 쿼리에 두 번째 매개 변수를 전달하여 필드를 제외 할 수 있습니다 :

    User.find({_id: req.user.id}, {password: 0})
            .then(users => {
              res.status(STATUS_OK).json(users);
            })
            .catch(error => res.status(STATUS_NOT_FOUND).json({error: error}));
    

    이 경우, 암호는 쿼리에서 제외됩니다.

    위치 : https://docs.mongodb.com/v2.8/tutorial/project-fields-from-query-results/#return-all-but-the-excluded-field

  7. ==============================

    7.나는 Mongoosemask를 사용하고 그것으로 매우 기쁘게 생각하고 있습니다.

    나는 Mongoosemask를 사용하고 그것으로 매우 기쁘게 생각하고 있습니다.

    그것은 지원 숨어과 필요에 따라 다른 이름이 노출 특성을한다

    https://github.com/mccormicka/mongoosemask

    VAR maskedModel = mongomask.mask (모델 [ '이름', '나이']); // 그리고 당신이 완료됩니다.

  8. from https://stackoverflow.com/questions/11160955/how-to-exclude-some-fields-from-the-document by cc-by-sa and MIT license