Tengo una herramienta sencilla para compilar colecciones de documentos y luego formatearlas automáticamente para EPUB o LaTeX, escrito sobre ExpressJS. Estoy usando Coffeescript, si eso importa (lo dudo).Mongoose: ObjectId Las comparaciones no son consistentes
Usando Mangosta, Tengo el siguiente:
DocumentSchema = new Schema
title: String
Offrefs = new Schema
ref: { type: ObjectId }
isa: String
BinderSchema = new Schema
title: String
contains: [Offrefs]
Offrefs no especifica a qué se refiere, ya porque quiero ser capaz de contener algunas carpetas en otras carpetas, para crear colecciones lógicas: "Estos son para la impresora, "Estos son para epub", "Estos son solo web", etc. (He eliminado todas las cosas misceláneas)
Desafortunadamente, me he encontrado con consultas donde, para recuperarlas objetos
(story._id == offref.ref) -> True
Y los dos realmente se ven iguales. Pero:
(binder._id == offref.ref) -> False
(String(binder._id) == String(offref.ref)) -> True
Y una comparación visual de las dos referencias en los dos últimos, que son el mismo número de identificación, pero los ObjectId
objetos no se pueden comparar correctamente.
No quiero tener que hacer conversiones de cadenas constantemente, lo cual es una gran posibilidad cuando convierto estos objetos complejos en árboles de datos. Las relaciones de árbol son un oso en cualquier DB; no deberían ser difíciles en MongoDB.
¿Cómo se hace las comparaciones con ObjectId en MongoDB?
Yay, características no documentadas. – peterjwest
¿Entonces esto no es lo mismo que mongoose.Schema.Types.ObjectID? Su documentación implica que solo tiene el método 'auto': http://mongoosejs.com/docs/api.html#schema-objectid-js – peterjwest
@peterjwest Correcto, 'mongoose.Schema.Types.ObjectId' es realmente solo para usar como metadatos de campo en las definiciones de esquema. – JohnnyHK