Bartłomiej Flis
Bartłomiej Flis

Reputation: 287

incomprehensible result when comparing between id inside array and id NodeJS

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

Answers (1)

Ele
Ele

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

Related Questions