我有2个相同的ID,但是当我尝试查找它们是否相等时,它们不是

时间:2019-05-25 17:44:47

标签: node.js mongoose

我正在从数据库中搜索数组,正在与MongoDB和Mongoose一起使用,以获取ID。只有1个ID,当我尝试在数组中找到它时,找不到它。

我使用了函数“ findIndex()”,但是即使有要查找的ID,结果仍然为-1。

exports.getProfile = async (req,res,next) => {
    const targetUser = req.params.userId;
    const loggedInUser = req.session.user._id;

    try{
       let user = await User.findOne({"_id":targetUser});
       const a  = user.positiveRanked.length;
       const b  = user.negativeRanked.length;

       console.log(a,b);
       if(a === 0 && b ===0){
           res.render('profile/profile', {
               user:user,
               pageTitle:'Mirror-Mirror',
               path:'/profile',
               hiddenButtons: false
           })
       }
       if(b!==0) {
        const index = user.negativeRanked.findIndex(id => id === loggedInUser);
           console.log(user.negativeRanked,index, loggedInUser);
       }
}
    catch(error ) {
        console.log(error);
    }


}

我的想法是我要呈现一个页面,但是我想将“ hiddenButtons”设置为false或true。如果我在该targetUser数组中找到了LoggedInUser的ID,则我希望hiddenButtons为true,否则为false。

但是在创建用户时,两个数组positiveRanked和negativeRanked都为空。我具有填充这些数组的功能,并且可以正常工作。

您能帮我吗?谢谢!

console.log显示此

  

[“ 5ce979c981d1fb079f8c1d2f”] -1'5ce979c981d1fb079f8c1d2f'

2 个答案:

答案 0 :(得分:2)

我相信您遇到了错误,因为您正在尝试将mongo ObjectIDstring进行比较。

常量索引= user.negativeRanked.findIndex(id => id.toString()=== loggingInUser)

答案 1 :(得分:1)

Mongoose中,ObjectID是自定义类型(因为它使用mongodb-native驱动程序),因此每个ObjectId都有一个.equals()函数,可用于比较对象ID: results.userId.equals(AnotherMongoDocument._id)

您还可以调用ObjectID的.toString()函数以将其转换为字符串并将其与另一个字符串进行比较。