MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara menyimpan hasil dari formulir yang dibuat secara dinamis di MongoDb?

Saya tidak akan menyimpan hasil sebagai dokumen yang disematkan dalam form dokumen, karena Anda mungkin tidak tahu apriori berapa banyak kiriman yang diharapkan. MongoDB membatasi setiap dokumen hingga 16 MB, tetapi dalam praktiknya Anda mungkin ingin tetap berada di bawah ambang batas ini.

Karena formulir Anda bervariasi, tetapi telah ditentukan sebelumnya (yaitu, setiap formulir mungkin berbeda tetapi formulir ditentukan sebelumnya di semacam UI admin), saya sarankan menggunakan dua koleksi:

Yang pertama (sebut saja forms ) akan menyimpan data tentang susunan setiap formulir:bidang apa, jenis apa, dalam urutan apa, dll. Anda dapat membayangkan dokumen dalam koleksi ini akan terlihat seperti ini:

{ _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 },
    }
  ]
}

Ini memungkinkan Anda membuat formulir secara dinamis (bersama dengan beberapa kode sisi server) sesuai kebutuhan untuk ditampilkan di aplikasi Anda. Ini juga memberikan informasi tentang bidang apa dan validasi apa yang diperlukan untuk bidang tersebut, yang dapat Anda gunakan selama pengiriman formulir. Anda akan menginginkan indeks pada URL atau bidang apa pun yang Anda gunakan untuk menentukan formulir mana yang akan ditampilkan saat melayani permintaan web.

Koleksi kedua, submissions atau sesuatu, akan menyimpan data yang dikirimkan untuk setiap formulir. Dokumen akan terlihat seperti:

{ _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
  }
}

Jika Anda harus dapat mencari berdasarkan pasangan nilai bidang (atau hanya nilai) dalam formulir yang dikirimkan, variasi ini menggunakan larik untuk values bidang, seperti:

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

Anda kemudian dapat membuat indeks pada values bidang, dan cari seperti:

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

Atau buat indeks di "values.value" dan cari seperti:

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara menghasilkan id objek unik di mongodb

  2. Mengurutkan mongo pada kondisi yang diperhitungkan

  3. Hapus setiap simbol non utf-8 dari string

  4. DB dengan kinerja sisipan/detik terbaik?

  5. Kesalahan kunci duplikat MongoDB E11000