У меня есть простой инструмент для создания коллекций документов, а затем автоматически их форматирование для рендеринга EPUB или LaTeX, написанного поверх ExpressJS. Я использую Coffeescript, если это имеет значение (я сомневаюсь).
Используя Mongoose, у меня есть следующее:
DocumentSchema = new Schema
title: String
Offrefs = new Schema
ref: { type: ObjectId }
isa: String
BinderSchema = new Schema
title: String
contains: [Offrefs]
Offrefs не указывает, к чему это относится, потому что я хочу иметь возможность содержать некоторые связующие в других связующих, создавать логические коллекции: "Это для принтера", "Это для epub", "Это web only" и т.д. (я удалил все разные вещи.)
К сожалению, я столкнулся с запросами, где для восстановленных объектов
(story._id == offref.ref) -> True
И оба действительно выглядят одинаково. Но:
(binder._id == offref.ref) -> False
(String(binder._id) == String(offref.ref)) -> True
И визуальное сравнение двух ссылок в последних двух, они имеют одинаковый идентификационный номер, но объекты ObjectId
не сравниваются правильно.
Я не хочу постоянно выполнять преобразования строк, что является сильной возможностью, когда я конвертирую эти сложные объекты в деревья данных. Деревовые отношения - медведь в любой БД; они не должны быть трудными в MongoDB.
Как вы выполняете сравнения ObjectId в MongoDB?