如何通过Blog ID查询拥有该Blog的Mongoose User文档
查询包含指定Blog ID的用户(Mongoose)
嘿,这个需求其实很容易实现,MongoDB和Mongoose对数组类型的字段有很友好的查询支持,我给你两种常用的写法:
基础查询写法
假设你的Mongoose模型已经定义为User,要查找occasions数组中包含指定Blog ID(比如"ab95848gkdi011ff")的用户,直接用普通的匹配语法就行:
const targetBlogId = "ab95848gkdi011ff"; // 方法1:直接匹配数组包含目标值 User.find({ occasions: targetBlogId }) .then(users => { console.log("符合条件的用户:", users); }) .catch(err => { console.error("查询失败:", err); });
如果你之后需要同时匹配多个Blog ID,用$in运算符会更灵活,单个ID的场景下也完全适用:
// 方法2:使用$in匹配数组中的任一目标值 User.find({ occasions: { $in: [targetBlogId] } }) .then(users => { console.log("符合条件的用户:", users); }) .catch(err => { console.error("查询失败:", err); });
Async/Await 写法(更现代的异步风格)
如果你的项目用了async/await,写法会更简洁直观:
async function getUsersWithBlog(targetBlogId) { try { const matchingUsers = await User.find({ occasions: targetBlogId }); console.log("找到的用户:", matchingUsers); return matchingUsers; } catch (error) { console.error("查询出错啦:", error); throw error; // 可以根据业务需求处理错误 } } // 调用函数 getUsersWithBlog("ab95848gkdi011ff");
额外提示
确保你的User模型里occasions字段是数组类型的定义,比如如果Blog的ID是ObjectId类型:
const userSchema = new mongoose.Schema({ // 其他字段... occasions: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Blog' }] }); const User = mongoose.model('User', userSchema);
如果是字符串ID的话,就把类型改成[String]就行。
内容的提问来源于stack exchange,提问作者mmouru
相关产品推荐
相关产品推荐

