3
를 채울 I가 다음 스키마 (커피 스크립트) :는 몽구스는 하나의 가상 필드
adSchema = new mongoose.Schema({
...
user : { type: mongoose.Schema.Types.ObjectId, ref: 'User' }
...
},
{
toObject: { virtuals: true },
toJSON: { virtuals: true }
})
userSchema = new mongoose.Schema({
username : String
email :
type : String
required : true
index :
unique : true
adverts : [{ type: mongoose.Schema.Types.ObjectId, ref: 'Advert' }]
},
{
toObject: { virtuals: true }
toJSON: { virtuals: true }
})
userSchema.virtual('screenname').get() ->
if this.username? then this.username else this.email.split('@')[0]+'@...'
그럼 내가 기록의 무리를 얻고 사용자 채우는 시도 :
getAdvertPage = (obj, fn) ->
page_size = 10
query =
tags : obj.tag
Advert.count query, (err, count) ->
Advert.find(query)
.sort(obj.sort)
.skip((obj.page-1)*page_size)
.limit(page_size)
.populate('user', 'screenname')
.exec (err, ads) ->
ads.lastPage = (obj.page-1)*page_size + page_size >= count
fn err, ads
을하지만 난 단지 원하는 사용자의 screenname과 아무것도 (가상 필드입니다). 그러나이 오류가 발생합니다
Cannot call method 'split' of undefined
나는 그것이 잘 작동 채우기에 이메일을 포함하지만 나는 클라이언트에게 이메일을 보내하지 않으려면. 가상 필드 만 채울 방법이 없습니까?
네, populate에'email'과'username'을 포함하면이 일이 가능하다는 것을 압니다. 그러나 이메일을 클라이언트에게 보내지 않습니다. 결과를 검토하고 클라이언트에게 보내기 전에 이메일을 제거 할 수는 있지만 해킹을 원하지 않습니다. 가상 내부의 비즈니스 로직에 대한 정보를 보내 주셔서 감사합니다. 나는 그것을 살펴볼 것이다 :) – Baldur
그러나이 접근법은 잘 보이지 않는 _id도 채 웁니다. – HarryJs