Запросы для элемента в массиве вложенных подсхем по индексу подсхемы - PullRequest
0 голосов
/ 09 июля 2019

Краткое описание проблемы

Я получил вложенный массив подсхемы в схеме 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'.Хотя, когда я вызываю свою конечную точку, я получаю пустой массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...