MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak przechowywać wyniki z dynamicznie generowanych formularzy w MongoDb?

Nie zapisałbym wyników jako dokumentów osadzonych w form dokument, ponieważ możesz nie wiedzieć a priori ile zgłoszeń można się spodziewać. MongoDB ogranicza każdy dokument do 16 MB, ale w praktyce prawdopodobnie chcesz pozostać znacznie poniżej tego progu.

Ponieważ twoje formularze są zmienne, ale z góry określone (to znaczy, że każdy formularz może się różnić, ale formularze są zdefiniowane z wyprzedzeniem w jakimś interfejsie administratora), zalecam użycie dwóch kolekcji:

Pierwszy (nazwij go forms ) będzie przechowywać dane o składzie każdego formularza:jakie pola, jakie typy, w jakiej kolejności itp. Możesz sobie wyobrazić, że dokumenty w tej kolekcji wyglądają mniej więcej tak:

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

Pozwala to na dynamiczne konstruowanie formularzy (wraz z pewnym kodem po stronie serwera) zgodnie z potrzebami wyświetlania w aplikacji. Podaje również informacje o tym, jakie są pola i jaka jest wymagana dla nich walidacja, z której możesz skorzystać podczas przesyłania formularza. Będziesz potrzebować indeksu adresu URL lub dowolnego innego pola, którego używasz, aby określić, który formularz ma być wyświetlany podczas obsługi żądań internetowych.

Druga kolekcja, submissions czy coś, przechowuje przesłane dane dla każdego formularza. Dokumenty wyglądałyby tak:

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

Jeśli musisz mieć możliwość wyszukiwania według par pole-wartość (lub tylko wartości) w przesłanych formularzach, odmiana tego używa tablicy dla values pole, takie jak:

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

Następnie możesz utworzyć indeks na values pole i szukaj jak:

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

Lub utwórz indeks na „values.value” i wyszukaj:

// 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. Mongoose nie może połączyć się bez Internetu

  2. mongodb jak uzyskać maksymalną wartość z kolekcji

  3. Dopełnienie w SQL

  4. Jak wysyłać zapytania do MongoDB bezpośrednio z Rubiego zamiast używać Mongoid?

  5. Porównanie wzorców wdrażania dla MongoDB