スキーマを定義せずにマングースをどのように使用しますか?
質問
Mongooseの以前のバージョン(node.jsの場合)には、スキーマを定義せずに使用するオプションがありました
var collection = mongoose.noSchema(db, "User");
しかし、現在のバージョンでは、「noschema」関数が削除されています。私のスキーマは頻繁に変化する可能性が高く、実際には定義されたスキーマに適合していないので、マングースでスキーマレスモデルを使用する新しい方法はありますか?
解決
これがあなたが探しているものだと思います マングース厳格
オプション:厳格
厳密なオプション(デフォルトで有効)により、スキーマで指定されていないモデルインスタンスに追加された値が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で正確にそれを行うように見えます...
それはaを受け入れます スキーマなし, フリーフォームJSオブジェクト - だからあなたがそれを投げることができるものは何でも。その後、そのオブジェクトを手動で保存する必要があるようですが、公正なトレードオフのようです。
混合
「Anything Goes」スキーマタイプ、その柔軟性は、維持がより困難であるというトレードオフにもたらされます。混合は介して利用できます
Schema.Types.Mixed
または、空のオブジェクトを文字通り渡すことによって。以下は同等です。var Any = new Schema({ any: {} }); var Any = new Schema({ any: Schema.Types.Mixed });
スキーマレスタイプであるため、値を好きなものに変更することができますが、Mongooseはこれらの変更を自動検出して保存する機能を失います。混合タイプの値が変更されたことをマングースに「伝える」ために、
.markModified(path)
変更したばかりの混合タイプへのパスを通過するドキュメントの方法。person.anything = { x: [3, 4, { y: "changed" }] }; person.markModified('anything'); person.save(); // anything will now get saved
ちょっとクリス、見てください mongous. 。私のスキーマは現在開発中に非常に頻繁に変化するので、私はMongooseと同じ問題を抱えていました。 Mongousは、私の「スキーマ」をゆるく定義し、変更することができる一方で、私がマングースのシンプルさを持つことを許しました。標準の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」のようなクールなミドルウェアを逃したと思います。私はそれを必要としませんでした。お役に立てれば!!!
もう不可能です。
スキーマとノードドライバーを備えたコレクションまたはそれらのスキーマレスのモジュールでは、Mongooseを使用できます。
https://groups.google.com/forum/#!msg/mongoose-orm/bj9ktji0naq/qsojymodwdyj