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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top