Reputation: 287
I want return result true, but javascript talking that its false. Could someone explain me why? here is log with console.log
5a8f1df35f65a820f4dc56ed 5a8db5d449c0572dbc60548c
false
5a91e3de5b8d6d18580c9aff 5a8db5d449c0572dbc60548c
false
5a91e3f45b8d6d18580c9b00 5a8db5d449c0572dbc60548c
false
5a8db5d449c0572dbc60548c 5a8db5d449c0572dbc60548c
.get('/selected/board', function (req, res) {
var isExist = false;
Board.findById({ _id: req.query._id })
.then((board) => {
board.users.forEach(element => {
console.log(element == req.user._id)
console.log(element, req.user._id)
});
// res.json(board);
})
.catch((err) => {
res.status(404).json('Cant download.')
})
})
EDIT
element: "5a8f1df35f65a820f4dc56ed" req.user._id: "5a8db5d449c0572dbc60548c"
false
element: "5a91e3de5b8d6d18580c9aff" req.user._id: "5a8db5d449c0572dbc60548c"
false
element: "5a91e3f45b8d6d18580c9b00" req.user._id: "5a8db5d449c0572dbc60548c"
false
element: "5a8db5d449c0572dbc60548c" req.user._id: "5a8db5d449c0572dbc60548c"
true
element: "5a8f1df35f65a820f4dc56ed" req.user._id: "5a8db5d449c0572dbc60548c"
false
element: "5a91e3de5b8d6d18580c9aff" req.user._id: "5a8db5d449c0572dbc60548c"
false
element: "5a91e3f45b8d6d18580c9b00" req.user._id: "5a8db5d449c0572dbc60548c"
false
element: "5a8db5d449c0572dbc60548c" req.user._id: "5a8db5d449c0572dbc60548c"
true
Upvotes: 0
Views: 39
Reputation: 33726
The element within board.users
has an attribute id
whose type is ObjectId("45465456464")
, so the comparison you're executing follows this rule:
+--- Operand ObjectId(...)
|
v
ToPrimitive(element) == B <---- String from the request.
So, this condition is always false
element == req.user._id
Take a look at this doc Loose equality using ==
An alternative is converting to String
element.toString() == req.user._id
Upvotes: 1