#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. Пожалуйста, не публикуйте только код в качестве ответа, но также предоставьте объяснение того, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением, как правило, более полезны и более качественны, и с большей вероятностью привлекут внимание.