Краткое описание проблемы
Я получил вложенный массив подсхемы в схеме Mongoose для модели.Попытка запросить конкретный элемент в таком массиве, так как я не знаю идентификатор, который мне нужен в этой конечной точке.Как бы я пошел об этом?Я видел похожий пост о запросе массива строк, в котором говорилось, что вы можете просто запросить по условию, но это не работает для меня.
Что я пробовал
Я подумал просто запросить всю модель и выполнить итерацию для того, что я хочу, но это решение O (N ^ 2).Я уже знаю, что промежуточное ПО аутентификации, на которое я ссылаюсь в запросе, работает, поскольку я использовал это много раз со всеми остальными конечными точками, которые я ранее использовал.Решение на основе JWT, которое помещает идентификатор пользователя в объект запроса, извлеченный из JWT, отправленного в заголовках запроса.
Модель
var mongoose = require('mongoose');
const GroupSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
course: {
type: String,
required: true
},
max_members: Number,
description: String,
public: {
type: Boolean,
default: false
},
requests: {
type: [mongoose.Schema.Types.ObjectId],
ref: 'user'
},
members: [{
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'user',
},
host: {
type: Boolean,
default: false
}
}],
stickied_posts: [{
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'user',
},
name: String,
post: String,
time_stamp: Date
}],
date_created: {
type: Date,
default: Date.now()
}
})
var Group = mongoose.model('group', GroupSchema);
module.exports = Group;
Конечная точка
router.get('/groupsTheUserHosts', auth, async (req, res) => {
try {
// req.user.id comes from the auth middleware
let groups = await Group.find({ members: { user: req.user.id, host: true }});
res.json(groups);
} catch (err) {
console.error(err.message);
res.status(500).send('Server error');
}
});
Опишите ожидаемые и фактические результаты
В коллекции «Группа» я получил 3 документа, в которых этот пользователь является «хостом»в массиве 'members'.Хотя, когда я вызываю свою конечную точку, я получаю пустой массив.