以前のバージョンの Mongoose (node.js 用) では、スキーマを定義せずに使用するオプションがありました。
var collection = mongoose.noSchema(db, "User");
ただし、現在のバージョンでは「noSchema」機能が削除されています。私のスキーマは頻繁に変更される可能性が高く、実際には定義されたスキーマに適合しません。マングースでスキーマのないモデルを使用する新しい方法はありますか?
これがあなたが探しているものだと思いますMongoose Strict
オプション: 厳格
strict オプション (デフォルトで有効) は、スキーマで指定されていないモデル インスタンスに追加された値がデータベースに保存されないようにします。
注: 正当な理由がない限り、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
)モードはマングースとまったく同じように見えます...
スキーマのない自由形式のJSオブジェクトを受け入れるので、スローできるものは何でも受け入れます。後でそのオブジェクトの保存を手動でトリガーする必要があるようですが、それは公正なトレードオフのようです。
混合
「何でもあり」のSchemaTypeは、その柔軟性と、保守が難しいというトレードオフがあります。混合は
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 のシンプルさを維持できます。私は単純に標準の 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」などのクールなミドルウェアを見逃していると思います。私はそれを必要としませんでした。お役に立てれば!!!
注: この{ strict: false }
パラメーターは、作成と更新の両方で機能します。
それはもう不可能です。
Mongoose は、スキーマを持つコレクションとノード ドライバー、またはスキーマのないコレクション用の別の mongo モジュールで使用できます。
https://groups.google.com/forum/#!msg/mongoose-orm/Bj9KTjI0NAQ/qSojYmoDwDYJ