私は次のスキーマ(CoffeeScript)を持っています:
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
しかし、私はユーザーのスクリーンネームだけが必要で、他には何も必要ありません(これは仮想フィールドです)。ただし、これによりエラーが発生します。
Cannot call method 'split' of undefined
ポピュレートに電子メールを含めると正常に機能しますが、クライアントに電子メールを送信したくありません。仮想フィールドのみにデータを入力する方法はありませんか?