Domanda

Nelle versioni precedenti di Mongoose (per node.js) c'era un'opzione per usarlo senza definire uno schema

var collection = mongoose.noSchema(db, "User");

Ma nella versione corrente la funzione "Noschema" è stata rimossa. È probabile che i miei schemi cambino spesso e non si adattino davvero a uno schema definito, quindi c'è un nuovo modo di utilizzare modelli senza schema a Mongoose?

È stato utile?

Soluzione

Penso che questo sia quello che stai cercando Mongoose rigoroso

Opzione: rigoroso

L'opzione rigorosa, (abilitata per impostazione predefinita), garantisce che i valori aggiunti alla nostra istanza del modello che non sono stati specificati nel nostro schema non vengano salvati nel DB.

Nota: non impostare su Falso a meno che tu non abbia buone ragioni.

    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!!

Altri suggerimenti

In realtà "misto" (Schema.Types.Mixed) la modalità sembra farlo esattamente in Mongoose ...

accetta un senza schema, Oggetto JS Freeform - Quindi qualunque cosa tu possa lanciarlo. Sembra che tu debba innescare salvataggi su quell'oggetto manualmente in seguito, ma sembra un compromesso equo.

Misto

Uno schema di "qualsiasi cosa va", la sua flessibilità arriva a un compromesso per essere più difficile da mantenere. Miscelato è disponibile tramite Schema.Types.Mixed o passando un oggetto vuoto letterale. Di seguito sono equivalenti:

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

Dal momento che è un tipo senza schema, puoi cambiare il valore in qualsiasi altra cosa ti piace, ma Mongoose perde la capacità di rilevare automaticamente e salvare tali modifiche. Per "dire" a mongoose che il valore di un tipo misto è cambiato, chiama il .markModified(path) Metodo del documento che passa il percorso al tipo misto che hai appena cambiato.

person.anything = { x: [3, 4, { y: "changed" }] };
person.markModified('anything');
person.save(); // anything will now get saved

Hey chris, dai un'occhiata Mongous. Stavo avendo lo stesso problema con Mongoose, poiché i miei schemi cambiano estremamente frequentemente in questo momento. Mongous mi ha permesso di avere la semplicità di Mongoose, pur essendo in grado di definire e cambiare vagamente i miei "schemi". Ho scelto di costruire semplicemente oggetti JavaScript standard e archiviarli nel database così

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
});

Molto più semplice di Mongoose, anche se credo che ti perda alcune cose middleware interessanti come "pre". Non avevo bisogno di tutto ciò però. Spero che sia di aiuto!!!

Non è più possibile.

Puoi usare Mongoose con le collezioni con schema e driver del nodo o un altro modulo Mongo per quelli schematici.

https://groups.google.com/forum/#!msg/mongoose-orm/bj9ktji0naq/qsojymodwdyj

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top