[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.스키마 수준에이를 처리하는 또 다른 방법은 모델 toJSON을 무시하는 것입니다.
스키마 수준에이를 처리하는 또 다른 방법은 모델 toJSON을 무시하는 것입니다.
UserSchema.methods.toJSON = function() { var obj = this.toObject() delete obj.passwordHash return obj }
난 내가 클라이언트에 봉사 JSON에서 암호 해시를 제외하고 선택하는 방법을 찾고이 질문에 건너 온 : 그것은 전혀 데이터베이스에서 값을 검색하지 않았기 때문에 거짓 내 verifyPassword 기능을 끊었다.
-
==============================
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.내가 pymongo와 비슷한 답을 찾으려고 할 때 질문을 가로 질러 가자. 그것은 찾기 () 함수 호출과 몽고 쉘, 당신은 어떤 방법 결과 문서의 모양과 같은 지정하는 두 번째 매개 변수를 전달할 수있는 것으로 나타났다. 이 속성의 값이 0 인과 사전을 통과하면, 당신은이 쿼리 나올 모든 문서에서이 분야를 제외한다.
내가 pymongo와 비슷한 답을 찾으려고 할 때 질문을 가로 질러 가자. 그것은 찾기 () 함수 호출과 몽고 쉘, 당신은 어떤 방법 결과 문서의 모양과 같은 지정하는 두 번째 매개 변수를 전달할 수있는 것으로 나타났다. 이 속성의 값이 0 인과 사전을 통과하면, 당신은이 쿼리 나올 모든 문서에서이 분야를 제외한다.
귀하의 경우에는, 예를 들어, 쿼리는 같은 것입니다 :
db.user.find({an_attr: a_value}, {_creator: 0});
그것은 당신을 위해 _creator 매개 변수를 제외됩니다.
pymongo에서 찾기 () 함수는 거의 동일합니다. 확실하지가 생각 몽구스 번역 방법에 대해 설명합니다. 나는 그것이 나중에 수동으로 필드를 삭제 비교해 더 나은 솔루션 생각합니다.
희망이 도움이.
-
==============================
4.당신은 당신이 자유롭게 수정할 수있는 일반 JS 객체로 변환 할 문서에 toObject ()를 호출 할 수 있습니다 :
당신은 당신이 자유롭게 수정할 수있는 일반 JS 객체로 변환 할 문서에 toObject ()를 호출 할 수 있습니다 :
user = user.toObject(); delete user._creator; res.json(200, {user: user});
-
==============================
5.나는 (유틸리티 .pick lodash 사용) 또는 것
나는 (유틸리티 .pick lodash 사용) 또는 것
-
==============================
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.나는 Mongoosemask를 사용하고 그것으로 매우 기쁘게 생각하고 있습니다.
나는 Mongoosemask를 사용하고 그것으로 매우 기쁘게 생각하고 있습니다.
그것은 지원 숨어과 필요에 따라 다른 이름이 노출 특성을한다
https://github.com/mccormicka/mongoosemask
VAR maskedModel = mongomask.mask (모델 [ '이름', '나이']); // 그리고 당신이 완료됩니다.
from https://stackoverflow.com/questions/11160955/how-to-exclude-some-fields-from-the-document by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 어떻게 MongoDB를 내부 목록에 요소를 삽입? (0) | 2019.12.13 |
---|---|
[MONGODB] MongoDB를에 findOne를 사용하면 최대 ID를 가진 요소를 얻을 수 (0) | 2019.12.13 |
[MONGODB] 몽구스 : 깊은 인구 (채워진 필드를 채울) (0) | 2019.12.13 |
[MONGODB] 몽고에 인증 할 수 없습니다 "인증 실패" (0) | 2019.12.13 |
[MONGODB] 어떻게 다른 하나 개의 MongoDB를 서버에서 데이터베이스를 복사합니까? (0) | 2019.12.13 |