我正在从数据库中搜索数组,正在与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'
答案 0 :(得分:2)
我相信您遇到了错误,因为您正在尝试将mongo ObjectID
与string
进行比较。
常量索引= user.negativeRanked.findIndex(id => id.toString()=== loggingInUser)
答案 1 :(得分:1)
在Mongoose
中,ObjectID是自定义类型(因为它使用mongodb-native驱动程序),因此每个ObjectId
都有一个.equals()
函数,可用于比较对象ID:
results.userId.equals(AnotherMongoDocument._id)
您还可以调用ObjectID的.toString()
函数以将其转换为字符串并将其与另一个字符串进行比较。