¿Cómo se usa Mongoose sin definir un esquema?
Pregunta
En versiones anteriores de Mongoose (para Node.js) había una opción para usarlo sin definir un esquema
var collection = mongoose.noSchema(db, "User");
Pero en la versión actual se ha eliminado la función "Noschema". Es probable que mis esquemas cambien a menudo y realmente no encajen con un esquema definido, ¿hay una nueva forma de usar modelos sin esquema en Mongoose?
Solución
Creo que esto es lo que estás buscando Mangosta estricta
Opción: estricto
La opción estricta (habilitada por defecto) asegura que los valores agregados a nuestra instancia del modelo que no se especificaron en nuestro esquema no se guardan en el DB.
Nota: No se establezca en falso a menos que tenga una buena razón.
var thingSchema = new Schema({..}, { strict: false });
var Thing = mongoose.model('Thing', thingSchema);
var thing = new Thing({ iAmNotInTheSchema: true });
thing.save() // iAmNotInTheSchema is now saved to the db!!
Otros consejos
En realidad "mezclado" (Schema.Types.Mixed
) El modo parece hacer exactamente eso en Mongoose ...
acepta un sin esquema, objeto JS Freeform JS - Entonces, sea lo que sea que puedas arrojarlo. Parece que tiene que activar los salvados en ese objeto manualmente después, pero parece una compensación justa.
Mezclado
Un esquema "Anything Goes", su flexibilidad es una compensación de que es más difícil de mantener. Mixto está disponible a través de
Schema.Types.Mixed
o pasando un objeto vacío literal. Los siguientes son equivalentes:var Any = new Schema({ any: {} }); var Any = new Schema({ any: Schema.Types.Mixed });
Dado que es un tipo sin esquema, puede cambiar el valor a cualquier otra cosa que desee, pero la mangosta pierde la capacidad de detectar y guardar automáticamente esos cambios. Para "decir" la mangosta que el valor de un tipo mixto ha cambiado, llame al
.markModified(path)
Método del documento que pasa la ruta al tipo mixto que acaba de cambiar.person.anything = { x: [3, 4, { y: "changed" }] }; person.markModified('anything'); person.save(); // anything will now get saved
Hola Chris, eche un vistazo a Mongoso. Estaba teniendo el mismo problema con la mangosta, ya que mis esquemas cambian extremadamente con frecuencia en este momento en desarrollo. Mongous me permitió tener la simplicidad de la mangosta, mientras podía definir y cambiar libremente mis 'esquemas'. Elegí simplemente construir objetos javascript estándar y almacenarlos en la base de datos como así
function User(user){
this.name = user.name
, this.age = user.age
}
app.post('save/user', function(req,res,next){
var u = new User(req.body)
db('mydb.users').save(u)
res.send(200)
// that's it! You've saved a user
});
Mucho más simple que la mangosta, aunque creo que te pierdes algunas cosas geniales de middleware como "pre". Sin embargo, no necesitaba nada de eso. ¡¡¡Espero que esto ayude!!!
Ya no es posible.
Puede usar Mongoose con las colecciones que tienen esquema y el controlador de nodo u otro módulo Mongo para aquellos esquemales.
https://groups.google.com/forum/#!msg/mongoose-orm/bj9ktji0naq/qsojymodwdyj