使用Mongoose虚拟架构时要检查多个字段?

时间:2018-08-19 08:01:02

标签: node.js mongodb mongoose mongoose-schema mongoose-populate

我有点想找出在数据库中填充虚拟架构的最佳方法。在这种情况下,我想检查多个字段,但我不知道执行此操作的任何方法或替代方法。

我曾经希望我可以在虚拟模式的'localField'和'foreignField'键中使用一些字符串数组,但事实并非如此。

用户保存了一个“系列” _id,虚拟模式“联盟”也获得了用户输入的所有联赛,而该渔获是一个联赛,属于不同的联赛。我只想检索用户输入的联赛以及与用户系列_id相匹配的联赛...

如您所见,当前,该虚拟模式仅返回用户输入的所有联赛,而与系列无关。 :(

有什么想法吗?我对如何实现这一目标感到非常困惑。

      const schema: mongoose.Schema = new mongoose.Schema({
        _id: {
          type: mongoose.Schema.Types.ObjectId,
          auto: true
        },
        username: {
          type: String,
          unique: true,
        },
        series: {
          ref: 'Serie',
          type: mongoose.Schema.Types.ObjectId,
          autopopulate: {
            maxDepth: 1,
            select: ['title']
          }
        }
      });

      schema.virtual('leagues', {
        ref: 'League',
        localField: '_id',
        foreignField: 'users',
        autopopulate: {
          maxDepth: 1,
          select: ['title', 'engineSize', 'host', 'series']
        }
      });

联赛架构如下

      const schema: mongoose.Schema = new mongoose.Schema({
        _id: {
          type: mongoose.Schema.Types.ObjectId,
          auto: true
        },
        title: String,
        series: {
          type: mongoose.Schema.Types.ObjectId,
          ref: 'Serie',
        },
        users: [{
          type: mongoose.Schema.Types.ObjectId,
          ref: 'User',
        }]
      });

1 个答案:

答案 0 :(得分:0)

这是我使用吸气剂检查猫鼬中多个字段的解决方案。

 schema.virtual('motoduel').get(function () {
   return motoduelModel.findOne({
     event: this.series.upcomingEvent._id,
     riderGroup: this.riderGroup._id
   });
 });