Поиск по определенному свойству в массиве объектов в MongoDB

#mongodb #mongoose #database-design #mongodb-query #mongoose-schema

Вопрос:

Раньше у меня был этот массив в схеме пользователя, ссылающийся на курс:

 courses: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: "Course",
    },
  ],
 

Когда я хотел найти все данные курсов различных курсов, на которые подписан конкретный пользователь, я обычно делал это:

 return Course.find({ _id: { $in: user.courses } })
 

Теперь я хотел бы сохранить, когда пользователь зарегистрировался на каждый курс, но я немного застрял здесь.

Я подумал, что мог бы просто изменить его на этот:

 courses: [
{
  courseRef: { // <==== Now it's not an array of refs, but an array of objects amp; each objects holds a reference to a course
    type: mongoose.Schema.Types.ObjectId,
    ref: "Course",
  },
  startDate: { type: Date, default: null },
},
 

],

Однако теперь return Course.find({ _id: { $in: user.courses } }) это больше не работает, так как массив содержит не эти ссылки, а свойство внутри каждого объекта массива.

Несколько намеков будут оценены по достоинству!

Ответ №1:

 return Course.find({ _id: {$elemMatch: { $in: user.courses }},startDate:{$gt:new Date('date')} })
 

Комментарии:

1. Спасибо. Разве мне не нужно было бы где-то указать, что я ищу это startDate поле?

2. Я не понимаю. Нужно ли мне что-то заменять в вашем ответе? Я получаю "ISODate is not defined

3. если вы хотите проверить другое поле , поставьте его как дата начала, поэтому замените объект даты на ISODate

4. к сожалению, не работает.

5. Пожалуйста, не публикуйте только код в качестве ответа, но также предоставьте объяснение того, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением, как правило, более полезны и более качественны, и с большей вероятностью привлекут внимание.