10

バージョン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」を未定義として返すのはなぜですか?

ありがとうございました!

4

2 に答える 2