【问题标题】:Find document based on field value on single subdocument in array根据数组中单个子文档的字段值查找文档
【发布时间】:2021-07-18 21:36:27
【问题描述】:

我有一个名为 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的日期?

【问题讨论】:

  • 你能分享示例数据吗?

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


【解决方案1】:

是的,实际上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
        });

【讨论】:

  • 就是这样,原来我只是瞎了眼,看错了它的级别——谢谢!
猜你喜欢
  • 2016-03-12
  • 2016-04-23
  • 1970-01-01
  • 2015-06-22
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多