Mongooseの以前のバージョン(node.js用)には、スキーマを定義せずに使用するオプションがありました
var collection = mongoose.noSchema(db, "User");
ただし、現在のバージョンでは「noSchema」関数は削除されています。私のスキーマは頻繁に変更される可能性が高く、定義されたスキーマに実際には適合しないので、スキーマレスモデルをmongooseで使用する新しい方法はありますか?
これがあなたが探しているものだと思います Mongoose Strict
オプション:strict
Strictオプション(デフォルトで有効)は、スキーマに指定されていないモデルインスタンスに追加された値がdbに保存されないようにします。
注:正当な理由がない限り、falseに設定しないでください。
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!!
実際に「混合」(_Schema.Types.Mixed
_)モードは、Mongooseでまさにそれを行うようです...
schema-less、freeform JSオブジェクトを受け入れますそれを投げることができます。後でそのオブジェクトで手動で保存をトリガーする必要があるようですが、それは公正なトレードオフのようです。
混合
「何でも可能」なSchemaTypeであるため、その柔軟性は、維持するのが難しいというトレードオフの関係にあります。 Mixedは、_
Schema.Types.Mixed
_を介して、または空のオブジェクトリテラルを渡すことで使用できます。以下は同等です:_var Any = new Schema({ any: {} }); var Any = new Schema({ any: Schema.Types.Mixed });
_スキーマレス型であるため、値を任意の値に変更できますが、Mongooseはこれらの変更を自動検出して保存する機能を失います。混合型の値が変更されたことをMongooseに「伝える」には、変更したばかりの混合型へのパスを渡すドキュメントの
.markModified(path)
メソッドを呼び出します。_person.anything = { x: [3, 4, { y: "changed" }] }; person.markModified('anything'); person.save(); // anything will now get saved
_
ちょっとクリス、 Mongous を見てください。開発中のスキーマは非常に頻繁に変更されるため、mongooseでも同じ問題が発生していました。 Mongousを使用すると、「スキーマ」を大まかに定義および変更できる一方で、Mongooseのシンプルさが得られました。標準のJavaScriptオブジェクトを単純に構築し、そのようにデータベースに保存することにしました
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
});
Mongooseよりもはるかに単純ですが、「pre」などのクールなミドルウェアをお見逃しなく。しかし、私はそれを必要としませんでした。お役に立てれば!!!