Mam proste narzędzie do tworzenia kolekcji dokumentów, a następnie automatycznego formatowania ich do renderowania EPUB lub LaTeX, napisanego na ExpressJS. Używam Coffeescript, jeśli to ma znaczenie (wątpię w to).Mongoose: ObjectId Porównania nie działają niekonsekwentnie
Korzystanie Mongoose, mam następujący:
DocumentSchema = new Schema
title: String
Offrefs = new Schema
ref: { type: ObjectId }
isa: String
BinderSchema = new Schema
title: String
contains: [Offrefs]
Offrefs nie precyzuje, co to oznacza, bo, ponieważ chcę, aby móc zawierać pewne spoiwa w innym spoiwem, aby tworzyć zbiory logiczne: „To są dla drukarki, "" Są to dla epub "," To są tylko sieci ", itp. (usunąłem wszystkie inne rzeczy).
Niestety, natknąłem się na zapytania, w których, do odzyskania obiekty
(story._id == offref.ref) -> True
Te dwie rzeczy wyglądają tak samo. Ale:
(binder._id == offref.ref) -> False
(String(binder._id) == String(offref.ref)) -> True
I wizualne porównanie dwóch odwołań w ciągu ostatnich dwóch, one są ten sam numer ID, ale ObjectId
obiekty nie porównać poprawnie.
Nie chcę stale wykonywać konwersji ciągów znaków, co jest dużą szansą, gdy konwertuję te złożone obiekty na drzewa danych. Relacje drzew są niedźwiedziami w dowolnej bazie danych; nie powinny być trudne w MongoDB.
W jaki sposób porównasz ObjectId w MongoDB?
Yay, nieudokumentowane funkcje. – peterjwest
Więc to nie to samo, co mongoose.Schema.Types.ObjectID? Ich dokumentacja sugeruje, że ma tylko metodę "auto": http://mongoosejs.com/docs/api.html#schema-objectid-js – peterjwest
@peterjwest Prawda, 'mongoose.Schema.Types.ObjectId' jest naprawdę tylko do użycia jako metadane typu pola w definicjach schematów. – JohnnyHK