¿Cómo se usa Mangosta sin definir un esquema?


En versiones anteriores de Mangosta (para nodo.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, así que ¿hay una nueva forma de usar modelos sin esquema en mangosta?

Author: Christopher Tarquini, 2011-03-20

4 answers

Creo que esto es lo que estás buscando Mangosta Estricto

Opción: estricto

La opción strict (habilitada de forma predeterminada) garantiza que los valores añadidos a nuestra instancia de modelo que no se especificaron en nuestro esquema no se guarden en la base de datos.

Nota: No establezca false 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!!
 125
Author: Jonathan P. Diaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-18 16:58:59

En realidad el modo "Mixto" (Schema.Types.Mixed) parece hacer exactamente eso en Mangosta...

Acepta un sin esquema, freeform JS object - así que cualquier cosa que puedas lanzarle. Parece que tiene que activar las guardadas en ese objeto manualmente después, pero parece una compensación justa.

Mixto

Un tipo de esquema "todo vale", su flexibilidad viene en una compensación de es más difícil de mantener. Mixto está disponible ya sea a través de Schema.Types.Mixed o pasando un objeto vacío literal. El 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 cosa si no te gusta, pero la mangosta pierde la capacidad de detectar y guardar automáticamente esos cambios. Para" decirle " a Mangosta que el valor de un tipo mixto tiene cambiado, llame al método .markModified(path) del paso del documento 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
 50
Author: kwhitley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-19 10:42:35

Hey Chris, echa un vistazo a Mongous . Estaba teniendo el mismo problema con mangosta, ya que mis Esquemas cambian con mucha frecuencia en este momento en desarrollo. Mongous me permitió tener la simplicidad de la mangosta, mientras que era capaz de definir y cambiar 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". Yo no necesitaba nada de eso. Espero que esto ayude!!!

 13
Author: Hacknightly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-21 14:58:32

Ya no es posible.

Puede usar Mongoose con las colecciones que tienen schema y el controlador de nodo u otro módulo mongo para las que no tienen schemaless.

Https://groups.google.com/forum/#! msg / mongoose-Bj/Bj9KTjI0NAQ / qSojYmoDwDYJ

 -7
Author: masylum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-21 00:07:47