2017-08-05 4 views
0

これらの編集フォームは、mongo dbのような最新のフレームワークを使用してどのように構築されているのだろうか。フォームフィールドをデータベースオブジェクトにマップする方法

質問を明確にするため、Mongoに格納されているオブジェクトのフィールドの一部を編集できるアプリケーションを作成したいと考えています。各 "フォーム提出"は、編集されたフィールドのみが変更されたオブジェクトの新しいインスタンスを作成する必要があります。

フォームにデータを入力するとき、オブジェクト全体を取得して、アプリケーションのビュー部分に関連するフィールドのみを生成するのは簡単です。

フォームを保存するときは、オブジェクトを再度取得し、フォームフィールドごとにオブジェクトごとにマップし、最後に新しいオブジェクトをデータベースに保存するか、またはすべてのフォームフィールドを事前に保存する必要があります。フォーム内のオブジェクトのフィールドを隠しフィールドとして使用し、いくつかのシリアル化を行います。

これはおそらく一般的な方法であり、これらの方法はどちらも優れた技術がないと思われます。

答えて

0

Mongooseをご覧ください。

マングースは、アプリケーションデータをモデル化するための簡単でスキーマベースのソリューションを提供します。これには、組み込みの型キャスト、検証、クエリ構築、ビジネスロジックフックなどが含まれています。

、ここで説明するように、マングースモデルを作成することができます。例えばhttp://mongoosejs.com/docs/models.html

var schema = new mongoose.Schema({ name: 'string', size: 'string' }); 
var Shirt = mongoose.model('Shirt', schema); 

次に、あなたのように、唯一の新しく更新されたパラメータを提供することで、あなたのシャツ文書インスタンスを更新することができますがhttp://mongoosejs.com/docs/api.html#model_Model.update

たとえば、

Shirt.update({ name: 'New Name' }, { size: 'small' }, 
    function (err, raw) { 
    if (err) return handleError(err); 
    console.log('The raw response from Mongo was ', raw); 
    } 
); 
0

いくつかのフィールドだけが送信される「疎」アップデートをMongoに送ることができます。ドキュメント全体を再保存する必要はありません。これを行うには、どのフィールドが変更されたかを把握する必要があります。 「ダーティー」フィールドとも呼ばれます。

これは、すべてがステートレスであるため、あなたが明示的に持っている伝統的な要求 - 応答往復ではやや困難です。

解決策の1つは、変更のためにフォームフィールドを聞いた小さなフロントエンドスクリプトを作成し、それらのフィールド名のリストを<input type="hidden">に保存することです。あなたのエクスプレスアプリで、その隠されたフィールドを確認してください。存在する場合は、それらのフィールドのみを処理します。存在しない場合は、ドキュメント全体を再度保存してください。

関連する問題