MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm cách nào để lưu trữ kết quả từ các biểu mẫu được tạo động trong MongoDb?

Tôi sẽ không lưu trữ kết quả dưới dạng tài liệu nhúng trong form tài liệu, vì bạn có thể không biết tiên nghiệm có bao nhiêu bài nộp để mong đợi. MongoDB giới hạn mỗi tài liệu là 16MB, nhưng trong thực tế, bạn có thể muốn duy trì tốt dưới ngưỡng này.

Vì các biểu mẫu của bạn có thể thay đổi, nhưng được xác định trước (nghĩa là mỗi biểu mẫu có thể khác nhau nhưng các biểu mẫu được xác định trước trong một số loại giao diện người dùng quản trị), tôi khuyên bạn nên sử dụng hai bộ sưu tập:

Đầu tiên (gọi nó là form ) sẽ lưu trữ dữ liệu về cấu trúc của từng biểu mẫu:trường nào, loại nào, thứ tự như thế nào, v.v. Bạn có thể tưởng tượng các tài liệu trong bộ sưu tập này sẽ trông giống như sau:

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

Điều này cho phép bạn xây dựng các biểu mẫu động (cùng với một số mã phía máy chủ) khi cần thiết để hiển thị trong ứng dụng của bạn. Nó cũng cung cấp thông tin về các trường là gì và xác thực nào là cần thiết cho chúng, bạn có thể sử dụng thông tin này trong quá trình gửi biểu mẫu. Bạn sẽ cần một chỉ mục trên URL hoặc bất kỳ trường nào bạn sử dụng để xác định biểu mẫu nào sẽ hiển thị khi phục vụ các yêu cầu web.

Bộ sưu tập thứ hai, submissions hoặc cái gì đó, sẽ lưu trữ dữ liệu đã gửi cho mỗi biểu mẫu. Các tài liệu sẽ giống như sau:

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

Nếu bạn cần có thể tìm kiếm theo các cặp trường-giá trị (hoặc chỉ giá trị) trong các biểu mẫu đã gửi, thì biến thể này sử dụng một mảng cho các giá trị values trường, như:

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

Sau đó, bạn có thể tạo chỉ mục trên các giá trị values và tìm kiếm như:

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

Hoặc tạo chỉ mục trên "giá trị.value" và tìm kiếm như:

// 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. Cách sử dụng thao tác $ cond trong khung tổng hợp Spring-MongoDb

  2. Lỗi nghiêm trọng - không tìm thấy lớp 'Mongo'

  3. Mongo tìm và cập nhật hàng loạt trường tài liệu phù hợp trong một truy vấn?

  4. Kết nối với mongodb thông qua trình duyệt?

  5. Cách triển khai MongoDB trên Heroku