如何用Mongoose在MongoDB中查询数组包含指定字符串?$in报错求助
解决MongoDB数组包含检查的报错问题
错误原因
你当前的代码错误地将$in操作符放在了查询的投影参数(第二个参数的大括号)中,$in是用于筛选文档的查询操作符,不能在投影里使用,这才导致了"$in需要两个参数"的报错。
正确的实现方法
要检查数组字段following是否包含指定字符串profileUsername,有几种更合适的写法:
方法1:使用$in(正确位置)
把$in放到查询条件(第一个大括号)里,用于匹配数组包含目标值的文档:
Following.find({ username: username, following: { $in: [profileUsername] } }).exec((err, result) => { if (err) { console.log(err); return res.json(err); } res.json(result); });
方法2:直接匹配数组值(更简洁)
MongoDB支持直接用数组字段匹配单个值,当字段是数组时,这种写法会自动匹配包含该值的文档:
Following.find({ username: username, following: profileUsername }).exec((err, result) => { if (err) { console.log(err); return res.json(err); } res.json(result); });
方法3:仅判断存在性(更高效)
如果你的需求只是判断是否存在这样的关系,不需要返回完整文档,可以用findOne来提升性能:
Following.findOne({ username: username, following: profileUsername }).exec((err, doc) => { if (err) { console.log(err); return res.json({ error: err }); } // 用!!doc将存在性转为布尔值返回 res.json({ isFollowing: !!doc }); });
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

