通过子模式索引

时间:2019-07-09 20:21:16

标签: arrays node.js mongodb express mongoose

问题摘要

我在一个猫鼬模式中得到了一个嵌套的子模式数组。尝试查询此类数组中的特定元素,因为我不知道此端点中需要的ID。我将如何处理?我看到过类似的有关查询字符串数组的文章,它说您可以按条件查询,但这对我不起作用。

我尝试过的事情

我考虑过只查询整个模型并迭代所需的内容,但这是O(N ^ 2)解决方案。我已经知道我在查询中引用的auth中间件是可以正常工作的,因为我已经对我以前使用的所有其他端点使用了很多次。一种基于JWT的解决方案,它将用户ID放入请求对象中,该ID是从请求的标头中发送的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个文档,其中用户是“成员”数组中的“主机”。虽然当我调用端点时,我得到了一个空数组。

0 个答案:

没有答案