问题摘要
我在一个猫鼬模式中得到了一个嵌套的子模式数组。尝试查询此类数组中的特定元素,因为我不知道此端点中需要的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个文档,其中用户是“成员”数组中的“主机”。虽然当我调用端点时,我得到了一个空数组。