根据数组中单个子文档的字段值查找文档

Find document based on field value on single subdocument in array

我有一个名为 WorkoutUser 的 Mongoose 集合,具有以下简化架构:

const WorkoutUserSchema = new Schema({
  user: {
    type: Schema.Types.ObjectId,
    ref: 'User',
    required: true,
  },
  exercises: [{
    exercise: {
      type: Schema.Types.ObjectId,
      ref: 'Exercise',
    },
    sets: [// not important],
    date: Date, // <- important
  }],
});

由于我不会在这里深入的原因,我想查询 WorkoutUser 集合以查找在当前锻炼之前与当前用户关联的锻炼的所有实例。由于此处不相关的其他原因,未在 WorkoutUser 上定义日期,但每次锻炼的日期都是相同的。

我想做如下事情:

const workouts = await db.WorkoutUser
        .find({
          _id: { $ne: workout._id },
          user: workout.user,
          'exercises.exercise': exercise.exercise,
          'exercises.exercise.date': { $lt: userWorkout.date }, // <- relevant line
        });

这目前不起作用。有没有一种方法可以基本搜索 exercises.exercise[0].date 的日期?

是的,实际上 exercisedate 都处于同一级别,因此您可以像这样修改查询

const workouts = await db.WorkoutUser
        .find({
          _id: { $ne: workout._id },
          user: workout.user,
          'exercises.exercise': exercise.exercise,
          'exercises.date': { $lt: userWorkout.date }, // <- relevant line
        });