等待 Mongoose 中的 Getter 完成
Wait for Getter in Mongoose to finish
我目前有两个collections:旅游和团体。由于一个旅游可以有多个团体,我想计算所有具有特定旅游 ID 的团体,并在我的旅游端点上提供它。
Group = require("../models/groupModel");
var tourSchema = mongoose.Schema({
title: String,
currentSize: {type: Number, get: getCurrentSize},
...
});
function getCurrentSize(currentSize) {
var persons = 0;
Group.find({ tour: this.id }, function (err, groups) {
for (var i = 0; i < groups.length; i++) {
persons += groups[i].persons;
}
return persons;
});
}
然而,如果我使用 getter,currentSize 甚至不会 returned。如果我删除它,它将 return 一个值存储在文档中。
有什么办法可以实现吗?我已经将它作为一个异步函数尝试过,它会导致一些“查询已执行”错误。
好吧,不知何故我完全走错了路。睡了一觉后,我发现我需要的是虚拟机。
var tourSchema = mongoose.Schema({
title: String,
...
});
tourSchema
.virtual("currentSize", {
ref: "group", // The model to use
localField: "_id", // Find people where `localField`
foreignField: "tour", // is equal to `foreignField`
})
.get(function (group) {
var persons = 0;
for (var i = 0; i < group.length; i++) {
persons += parseInt(group[i].persons);
}
return persons;
});
在我的 tourController.js 中,我可以使用这样的东西:
exports.index = async function (req, res) {
const tours = await Tour.find({})
.populate("currentSize")
res.json(tours);
}
我目前有两个collections:旅游和团体。由于一个旅游可以有多个团体,我想计算所有具有特定旅游 ID 的团体,并在我的旅游端点上提供它。
Group = require("../models/groupModel");
var tourSchema = mongoose.Schema({
title: String,
currentSize: {type: Number, get: getCurrentSize},
...
});
function getCurrentSize(currentSize) {
var persons = 0;
Group.find({ tour: this.id }, function (err, groups) {
for (var i = 0; i < groups.length; i++) {
persons += groups[i].persons;
}
return persons;
});
}
然而,如果我使用 getter,currentSize 甚至不会 returned。如果我删除它,它将 return 一个值存储在文档中。
有什么办法可以实现吗?我已经将它作为一个异步函数尝试过,它会导致一些“查询已执行”错误。
好吧,不知何故我完全走错了路。睡了一觉后,我发现我需要的是虚拟机。
var tourSchema = mongoose.Schema({
title: String,
...
});
tourSchema
.virtual("currentSize", {
ref: "group", // The model to use
localField: "_id", // Find people where `localField`
foreignField: "tour", // is equal to `foreignField`
})
.get(function (group) {
var persons = 0;
for (var i = 0; i < group.length; i++) {
persons += parseInt(group[i].persons);
}
return persons;
});
在我的 tourController.js 中,我可以使用这样的东西:
exports.index = async function (req, res) {
const tours = await Tour.find({})
.populate("currentSize")
res.json(tours);
}