152 votes

Comment utilisez-vous Mongoose sans définir de schéma?

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?

230voto

Jonathan P. Diaz Points 573

Je pense que c'est ce que vous cherchez, Mongoose Strict

option: stricte

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 = new Thing({ iAmNotInTheSchema: true });
    thing.save() // iAmNotInTheSchema is now saved to the db!!
 

68voto

kwhitley Points 324

En réalité, le mode de schéma "mixte" semble faire exactement cela en Mongoose ... il accepte un objet JS de forme libre, sans schéma - de sorte que vous pouvez le manipuler. Il semble que vous deviez ensuite déclencher manuellement des sauvegardes sur cet objet, mais cela semble être un compromis équitable.

 var Any = new Schema({ any: {} });

var Any = new Schema({ any: Schema.Types.Mixed });
 

Types de schéma Mongoose (http://mongoosejs.com/docs/schematypes.html)

18voto

hackNightly Points 2672

Hey Chris, jetez un oeil à Mongous. J'ai eu le même problème avec la mangouste, comme mes Schémas de changer très fréquemment dès maintenant en cours de développement. Mongous m'a permis d'avoir la simplicité de la Mangouste, tout en étant capable de vaguement de définir et de modifier mon 'schémas'. J'ai simplement choisi de construire hors de la norme JavaScript les objets 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
});

Beaucoup plus simple que la Mangouste, bien que je ne crois que vous manquez une cool middleware, des trucs comme "avant". Je n'ai pas besoin de tout cela. Espérons que cette aide!!!

-14voto

masylum Points 4819

Ce n'est plus possible.

Vous pouvez utiliser Mongoose avec les collections qui ont un schéma et le pilote de noeud ou un autre module Mongo pour ceux-là sans schéma.

https://groups.google.com/forum/#!msg/mongoose-orm/Bj9KTjI0NAQ/qSojYmoDwDYJ

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X