我试图使用include方法检查数组中现有的MongoDB Id,但它始终返回false。

是include方法中的某种错误,还是我做错了下面的代码?

  let user = req.user._id;
  let keyword= req.query.q;
  let userSearchHistory = await UserSearchHistory.findOne({searchKeywords: keyword}).exec();

  if (!userSearchHistory.users.includes(user))
  {

  }


我的数据库中的用户是一个ObjectId指向用户集合的数组

我也尝试过转换用户对象

   let user= mongoose.Types.ObjectId(req.user._id);


但是结果还是一样。
将ObjectIds转换为String可以为我工作,但是随后我必须删除模型中的引用,正确的处理方式是什么?

最佳答案

这可能是由于userSearchHistory.users返回一个objectIds数组而发生的。
您可以尝试将userSearchHistory.users.includes(user)替换为userSearchHistory.users.map(user=>user.toString()).includes(user)

这样,您将能够在应用“包含”功能之前将objectIds的数组转换为字符串的数组。

编辑:您是否尝试过使用req.user._id.trim()修剪'req.user._id'中的空格,然后将其强制转换为objectId?

09-25 16:11