【发布时间】:2021-04-29 19:39:09
【问题描述】:
我有一个serviceSchema,如下所示:
const serviceSchema = new mongoose.Schema(
{
user: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
required: true,
},
title: {
type: String,
required: true,
},
description: {
type: String,
required: true,
},
tags: [
{
type: String,
required: true,
},
],
image: {
type: String,
required: true,
get: (rawImage) => {
return `${config.base_url}/uploads/${rawImage}`;
},
},
},
{
timestamps: true,
toJSON: { getters: true, virtuals: true },
}
);
我已经定义了一个这样的虚拟:
serviceSchema.virtual("avg_satis").get(function () {
Session.find({ service: this._id, status: "conf" }, "satisfaction")
.lean()
.then((sessions) => {
let sum = 0;
sessions.forEach((session) => {
sum += session.satisfaction;
});
console.log(sum / sessions.length);
return sum / sessions.length;
})
.catch((err) => console.log(err));
});
当我执行这样的查询时:
const service = await Service.findById(req.params.service_id).populate(
"user",
"_id name pp"
);
console.log(service.avg_satisf);
虚拟未定义。
我也尝试像这样转换虚拟(没有承诺):
serviceSchema.virtual("avg_satis").get(function () {
Session.find({ service: this._id, status: "conf" }, "satisfaction")
.lean()
.exec((err, sessions) => {
if (err) {
console.log(err);
}
let sum = 0;
sessions.forEach((session) => {
sum += session.satisfaction;
});
console.log(sum / sessions.length);
return sum / sessions.length;
});
});
【问题讨论】:
-
virtual不允许异步功能。 -
@hoangdv 我该如何解决这个问题?
-
将会话模式添加到问题
标签: javascript node.js mongoose