我有Recipe
模型和Like
模型。我想在Recipe
模型上设置一个虚拟字段,以便在从数据库中获取食谱时获得它的点赞数。但它返回一个空对象。
RecipeSchema.virtual('likeCount').get(async function () {
const likes = await Like.find({ recipe: this._id });
return likes.length;
});
这不会直接回答您的问题,但如果虚拟机不能处理async
函数,则可以始终在RecipeSchema
中保留对Like对象数组的引用。
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const recipeSchema = Schema({
...
likes: [{ type: Schema.Types.ObjectId, ref: 'Like' }]
...
});
然后,您将在文档中有一个数组,您可以参考它的长度来计算点赞数,如果您需要点赞文档中的实际信息,您可以稍后populate
它们。
注意:您必须编写逻辑,才能在正确的Recipe中向likes
数组添加新的Likes。