sql >> データベース >  >> NoSQL >> MongoDB

動的に生成されたフォームの結果をMongoDbに保存するにはどうすればよいですか?

    結果をform内に埋め込みドキュメントとして保存しません 先験的を知らない可能性があるため、ドキュメント 予想される提出の数。 MongoDBでは各ドキュメントが16MBに制限されていますが、実際には、このしきい値を大幅に下回るようにする必要があります。

    フォームは可変ですが、事前に決定されているため(つまり、各フォームは異なる場合がありますが、フォームはある種の管理UIで事前に定義されています)、2つのコレクションを使用することをお勧めします。

    最初の(formsと呼びます )各フォームの構成に関するデータを保存します:どのフィールド、どのタイプ、どの順序など。このコレクションのドキュメントは次のようになります。

    { _id: ObjectId(...),
      name: "...",
      // other fields, for permissions, URL, etc
      fields: [
        { name: "username",
          type: "text",
          validation: { required: true, min: 1, max: null },
        },
        { name: "email",
          type: "text",
          validation: { required: true, min: 5, max: null, email: true },
        }
      ]
    }
    

    これにより、アプリケーションでの表示に必要なフォームを動的に(サーバー側のコードとともに)作成できます。また、フィールドとは何か、およびフィールドに必要な検証に関する情報も提供します。これは、フォームの送信時に使用できます。 Webリクエストを処理するときに表示するフォームを決定するために使用するURLまたは任意のフィールドのインデックスが必要になります。

    2番目のコレクションであるsubmissions または何か、各フォームの送信されたデータを保存します。ドキュメントは次のようになります:

    { _id: ObjectId(...),
      form: ObjectId(...), // the ObjectId of the record in "forms"
                           // that this is a submission on
      // other information here about the submitter:
      // IP address, browser, date and time, etc
      values: {
        username: "dcrosta",
        email: "[email protected]",
        //any other fields here
      }
    }
    

    送信されたフォームのフィールドと値のペア(または値のみ)で検索できるようにする必要がある場合、これのバリエーションでは、valuesの配列を使用します 次のようなフィールド:

    { ...
      values: [
        { name: "username", value: "dcrosta" },
        { name: "email", value: "[email protected]" }
      ]
    }
    

    次に、valuesにインデックスを作成できます フィールド、および次のように検索します:

    // find "dcrosta" as username
    db.submissions.find({values: {$elemMatch: {name: "username", value: "dcrosta"}}})
    

    または、「values.value」にインデックスを作成して、次のように検索します。

    // find "dcrosta" as value to any field
    db.submissions.find({"values.value": "dcrosta"})
    



    1. nodejsとredis-nodeを使用した非同期プログラミングパラダイム

    2. mongodbシェルクエリでGUIDを使用するにはどうすればよいですか

    3. MongoDB $ toObjectId

    4. MongoDb-タイプをIntからDoubleに変更します