等待 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);
}