You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 13:45:27