Dans les versions précédentes de Mongoose (pour node.js), il était possible de l'utiliser sans définir de schéma.
var collection = mongoose.noSchema(db, "User");
Mais dans la version actuelle, la fonction "noSchema" a été supprimée. Mes schémas sont susceptibles de changer souvent et ne correspondent vraiment pas à un schéma défini. Existe-t-il une nouvelle façon d'utiliser des modèles sans schéma en mangouste?
Je pense que c’est ce que vous cherchez Mongoose Strict
option: strict
L'option strict (activée par défaut) garantit que les valeurs ajoutées à notre instance de modèle et non spécifiées dans notre schéma ne sont pas enregistrées dans la base de données.
Remarque: ne définissez pas sur false, sauf si vous avez une bonne raison.
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!!
En réalité, le mode "Mixte" (Schema.Types.Mixed
) Semble faire exactement cela en Mongoose ...
il accepte un objet JS de forme libre sans schéma , - peut y jeter. Il semble que vous deviez ensuite déclencher manuellement des sauvegardes sur cet objet, mais cela semble être un compromis équitable.
Mixte
Un SchemaType "tout va bien", sa flexibilité vient du fait qu'il est plus difficile à maintenir. Mixed est disponible via
Schema.Types.Mixed
Ou en passant un littéral d'objet vide. Les éléments suivants sont équivalents:var Any = new Schema({ any: {} }); var Any = new Schema({ any: Schema.Types.Mixed });
Comme il s'agit d'un type sans schéma, vous pouvez modifier la valeur comme vous le souhaitez, mais Mongoose perd la possibilité de détecter et d'enregistrer automatiquement ces modifications. Pour "indiquer" à Mongoose que la valeur d'un type mixte a changé, appelez la méthode
.markModified(path)
du document transmettant le chemin d'accès au type mixte que vous venez de modifier.person.anything = { x: [3, 4, { y: "changed" }] }; person.markModified('anything'); person.save(); // anything will now get saved
Hey Chris, regarde Mongous . J'avais le même problème avec la mangouste, car mes schémas changent extrêmement fréquemment en cours de développement. Mongous m'a permis d'avoir la simplicité de Mongoose, tout en pouvant définir et changer mes "schémas" de manière lâche. J'ai choisi de construire simplement des objets JavaScript standard et de les stocker dans la base de données, comme
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
});
Bien plus simple que Mongoose, bien que je pense que vous manquez des éléments de middleware tels que "pre". Je n'avais cependant pas besoin de ça. J'espère que cela t'aides!!!