Ich habe ein unkompliziertes Werkzeug zum Erstellen von Dokumentensammlungen und zum automatischen Formatieren für EPUB- oder LaTeX-Rendering, das auf ExpressJS geschrieben wurde. Ich benutze Coffeescript, wenn das wichtig ist (ich bezweifle es).Mungo: ObjectId-Vergleiche schlagen inkonsistent fehl
Mit Mongoose, ich habe folgendes:
DocumentSchema = new Schema
title: String
Offrefs = new Schema
ref: { type: ObjectId }
isa: String
BinderSchema = new Schema
title: String
contains: [Offrefs]
Offrefs ist nicht festgelegt, was es bedeutet, weil, weil ich einige Bindemittel in der Lage sein wollen, in anderen Bindemittel enthalten, logische Sammlungen zu erstellen: „Diese sind für den Drucker, "" Diese sind für epub, "" Das sind nur Web, "etc. (Ich habe alle Verschiedenes ausgezogen.)
Leider habe ich in Abfragen wo, für abgerufen Objekte
(story._id == offref.ref) -> True
Und die beiden sehen tatsächlich gleich aus. Aber:
(binder._id == offref.ref) -> False
(String(binder._id) == String(offref.ref)) -> True
Und ein visueller Vergleich der beiden Referenzen in den letzten zwei, sie sind die gleiche ID-Nummer, aber die ObjectId
Objekte nicht korrekt vergleichen.
Ich möchte nicht ständig Zeichenfolgenkonvertierungen durchführen müssen, was eine starke Möglichkeit ist, wenn ich diese komplexen Objekte in Datenstrukturen umwandle. Baumbeziehungen sind in jedem DB ein Bär; Sie sollten in MongoDB nicht schwierig sein.
Wie machen Sie ObjectId Vergleiche in MongoDB?
Yay, undokumentierte Funktionen. – peterjwest
Also das ist nicht dasselbe wie mongoose.Schema.Types.ObjectID? Ihre Dokumentation impliziert, dass es nur die Methode 'auto' hat: http://mongoosejs.com/docs/api.html#schema-objectid-js – peterjwest
@peterjwest Richtig, 'mongoose.Schema.Types.ObjectId' ist wirklich nur für die Verwendung als Feldtyp-Metadaten in Schemadefinitionen. – JohnnyHK