バージョン3.6.17を使用して、マングースに次のスキーマを設定しています。
var PostSchema = new Schema({
_id: { type: String, required: true, index: { unique: true } },
video: { type: String, default: ''},
cover: { type: String, default: ''},
createdAt: { type: Date, default: Date.now },
lastUpdate: { type: Date, default: Date.now }
}, { autoIndex: true, toObject: { virtuals: true }, toJSON: { virtuals: true } });
そして、次の仮想:
PostSchema.virtual('replied').get(function () {
return false;
});
PostSchema.virtual('cover_url').get(function () {
return config.cover.server + this.cover;
});
PostSchema.virtual('video_url').get(function () {
return config.video.server + this.video;
});
集計クエリを実行すると:
Post.aggregate( { $match: { replyTo: { $ne: "" }, author: user._id, draft: false } },
{ $project: {
_id: 1,
video: 1,
video_url: 1,
cover: 1,
cover_url: 1,
createdAt: 1,
lastUpdate: 1,
Ireplied : { $not: "$replied"} }
}, function ( ) ....
この時点でバーチャルが返されますが、属性 this.cover または this.video が未定義で返されます。
そして、Post.findOne(..).lean().populate(...) などを実行すると、Post.find().lean().populate(.. .)
仮想を返すことができるようにするために、Postスキーマに何かが欠けていますか、それとも何か間違っていますか? また、集計操作で仮想が値「this.cover」を未定義として返すのはなぜですか?
ありがとうございました!