首页 > 解决方案 > 如何在子集合中制作虚拟对象 - Mogoose

问题描述

在猫鼬中,我有一个带有图像(名称+分机)的对象(“目标”)。每个对象(“目标”)。具有其他对象的子集合,该对象再次包含图像(名称+扩展名)。

现在我已经能够为 target.image 创建一个虚拟对象。所以我得到了一个完整的位置 URL。但我无法为 target.upload.image 创建一个虚拟对象。

我怎样才能做到这一点?

const targetSchema = mongoose.Schema({
    title: {
        type: String, required: true
    },
    userId: {
        type: String, required: true
    },
    ........
    image: {
        type: String, required: true
    },
    uploads: [{
        upload_image: {
            type: String, required: true
        },
        upload_userId: {
            type: String, required: true
        },
    }],
});

这是我的目标图像的虚拟

targetSchema.virtual('targetImgURL').get(function(){
    let url = process.env.URL + ":" + process.env.PORT + "/public/images/targets/uploads/" + this.image
    return url
});

标签: javascriptnode.jsmongodbmongoosemongoose-schema

解决方案


是的,我找到了解决方案。不幸的是,不可能一下子扣留所有东西。但这种方式并不是特别繁琐。请参阅下面的代码以获取解决方案。

const uploadSchema = mongoose.Schema({
    upload_image: {
        type: String, required: true
    },
    upload_userId: {
        type: String, required: true
    },
});

// Virtuals
uploadSchema.virtual('UploadImgURL').get(function(){
    let url = process.env.URL + ":" + process.env.PORT + "/public/images/targets/answers/" + this.image
    return url
});
const targetSchema = mongoose.Schema({
    title: {
        type: String, required: [true, 'A title is required']
    },
    ....
    uploads: [ uploadSchema ],
});

// Virtuals
targetSchema.virtual('targetImgURL').get(function(){
    let url = process.env.URL + ":" + process.env.PORT + "/public/images/targets/uploads/" + this.image
    return url
});

推荐阅读