Сценарий MongoDb: невозможно правильно сравнить два типа

У меня есть скрипт mongoDB.

db = connect("localhost:27017/metaiot");
var numbers = db.trips.find({trips :{$elemMatch : {"tripON":false}}});
numbers.forEach(function(setter)
    { for(var index in setter.trips){

        if(setter.trips[index]._id === ObjectId("562056e938396d1e248bbeee"))
            print("Yes");
    }
});

Теперь в моей БД у меня есть ObjectID.

ObjectId("56204f4a98114b0b23e7f833")
ObjectId("56204fbc8330653d23af74ef")
ObjectId("56205000190f575b238c8bb1")
ObjectId("562056e938396d1e248bbeee")

Вот вывод одного из операторов печати. Так что он существует. Но почему-то не работает оператор ===. Почему?? Каков возможный обходной путь?


person Saras Arya    schedule 17.10.2015    source источник
comment
Дублировать? Я не согласен. Причина сбоя кода в обоих вопросах одинакова, но цели решения разные. Упомянутый вопрос требует решения, которое позволяет избежать явного преобразования строки объекта: .equals() идеально подходит для этого. В этом вопросе уже есть строка для сравнения, и .equals() здесь будет неуклюжим. ОТВЕТ: В javascript === является оператором идентификации для объектов: существующий объект никогда не может === создать новый объект. Вместо этого используйте неявное преобразование строки для _id и оператор равенства if(setter.trips[index]._id == "562056e938396d1e248bbeee")   -  person Steve Tarver    schedule 24.10.2015
comment
Голосуйте за информацию о неявном преобразовании строк для поля _id и почему бы не использовать === .   -  person Saras Arya    schedule 25.10.2015