我有一个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
。
如何解决这个问题?
我可以在架构级别执行此操作吗?
答案 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以获取完整示例