2011-05-30 15 views
11

que tienen algunos datos en MongoDB que tiene este aspecto:¿Mongoose solo admite documentos incrustados en matrices?

{ 
    name: "Steve", 
    location: { 
     city: "Nowhere, IL", 
     country: "The United States of Awesome" 
    } 
} 

que estoy usando objetos para organizar estructuras de datos comunes (como ubicaciones), que a su Mangosta podría mapear muy bien a los esquemas. Desafortunadamente, no parecen funcionar realmente en Mongoose.

Si tan sólo incrustar un objeto, como esto:

{ 
    name: String, 
    location: { 
     city: String, 
     country: String 
    } 
} 

Parece que funciona, pero exhibe un comportamiento extraño que causa problemas para mí (por ejemplo instance.location.location vuelve location, y subobjetos heredar métodos del esquema de los padres) I started a thread en la lista Mongoose, pero no ha visto ninguna acción.

Si lo integrar un esquema, como esto:

{ 
    name: String, 
    location: new Schema({ 
     city: String, 
     country: String 
    }) 
} 

... mi aplicación no se inicia (Schema no es un tipo compatible con Mangosta). Ídem para

{ 
    name: String, 
    location: Object 
} 

... que no sería ideal, de todos modos.

¿Me estoy perdiendo algo o mis esquemas no jiven con Mongoose?

+1

Eche un vistazo a la documentación aquí -> http://mongoosejs.com/docs/embedded-documents.html. –

+1

@Andrew tengo. ¿Qué me estás mostrando? Me di cuenta de que dice: * "Los documentos incrustados son documentos con esquemas propios que forman parte de otros documentos (como elementos dentro de una matriz)." * ¿Esto significa que Mongoose no es compatible con esquemas como el mío? – s4y

Respuesta

1

Parece que este was a bug, se ha fijado en Mongoose 2.0!

3

hice algo similar:

var Topic = new Schema({ 
     author : ObjectId 
    , title  : String 
    , body  : String 
    , topics : [Topic] 
}); 

Esto funcionó bien en mis pruebas. Sin embargo, al eliminar los corchetes de la matriz se produjo un error. Parece un error para mí.

https://github.com/LearnBoost/mongoose/blob/master/lib/mongoose/schema.js#L185

tipos de dumping, lo único que consiguen String, Number, Boolean, DocumentArray, Array, Date, OBJECTID, Mixta - que parece ser a propósito, esquema/index.js no se ve como se registra dinámicamente nuevos Schemas en la lista de tipos, así que supongo que este no es un caso de uso admitido, aún.

https://github.com/LearnBoost/mongoose/issues/188

"Incorporación de documentos individuales está fuera de la cuestión. No es una buena idea (sólo tiene que utilizar objetos anidados regulares)"

Josh

+0

¡Interesante! Por lo tanto, parece que los "objetos anidados normales" (lo primero que intenté) también se rompen. Acabo de [archivar un problema] (https://github.com/LearnBoost/mongoose/issues/366). – s4y

Cuestiones relacionadas