如何在mongoose中从`population`字段的属性设置模型的属性?

时间:2017-10-07 10:50:07

标签: mongodb mongoose

我有一个Post,其author属性使用User设置为ref。假设country中有一个User字段,如何使Post架构具有country属性以及该值来自User.country之后的人口。< / p>

const Post = new Schema({
    text: String,
    author: {
        type: ObjectId, 
        ref: 'User'
    },
    // How to set the virtual property country which is from User.country?
});

我知道Mongoose中有Populate Virtuals,但它似乎只是populating的另一种方式,它不会获取其中一个属性,而是整个引用的记录。或许我弄错了?

我知道我可以从country引用Post.author.country,但我也想要Post.country

如何解决这个问题?
我可以在架构级别执行此操作吗?

1 个答案:

答案 0 :(得分:0)

如果您使用Populate Virtuals,则可以执行以下操作:

var schemaOptions = {
    toObject: {
        virtuals: true
    },
    toJSON: {
        virtuals: true
    }
};

var PostSchema = new Schema({
    text: String,
    id: false,
    author: {
        type: Schema.Types.ObjectId,
        ref: 'User'
    }
}, schemaOptions);

PostSchema.virtual('country').get(function() {
    return this.author.country;
});

使用:

Post.find({}).populate('author').exec(function(error, data) {
    console.log(JSON.stringify(data));
});

它给出了:

[{
    "_id": "59d924346be5702d16322a67",
    "text": "some text",
    "author": {
        "_id": "59d91f1a06ecf429c8aae221",
        "country": "France",
        "__v": 0
    },
    "__v": 0,
    "country": "France"
}]

检查this gist以获取完整示例