sql >> Databáze >  >> NoSQL >> MongoDB

Jak ukládat výsledky z dynamicky generovaných formulářů v MongoDb?

Výsledky bych neukládal jako vložené dokumenty do form dokument, protože možná neznáte a priori kolik příspěvků lze očekávat. MongoDB omezuje každý dokument na 16 MB, ale v praxi pravděpodobně budete chtít zůstat hluboko pod touto hranicí.

Vzhledem k tomu, že vaše formuláře jsou variabilní, ale předem určené (to znamená, že každý formulář se může lišit, ale formuláře jsou předem definovány v nějakém druhu uživatelského rozhraní správce), doporučil bych použít dvě kolekce:

První (nazývejte jej forms ) bude ukládat data o složení každého formuláře:jaká pole, jaké typy, v jakém pořadí atd. Můžete si představit, že dokumenty v této kolekci budou vypadat nějak takto:

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

To vám umožní vytvářet formuláře dynamicky (spolu s nějakým kódem na straně serveru) podle potřeby pro zobrazení ve vaší aplikaci. Poskytuje také informace o tom, co jsou pole a jaké ověření je pro ně vyžadováno, což můžete použít při odesílání formuláře. Budete chtít index na adrese URL nebo jiném poli, které používáte k určení formuláře, který se má zobrazit při poskytování webových požadavků.

Druhá kolekce, submissions nebo tak něco, uloží odeslaná data pro každý formulář. Dokumenty budou vypadat takto:

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

Pokud potřebujete mít možnost vyhledávat podle párů pole-hodnota (nebo jen hodnot) v odeslaných formulářích, varianta tohoto používá pole pro values pole, jako:

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

Poté můžete vytvořit index pro values pole a hledejte jako:

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

Nebo vytvořte index na "values.value" a hledejte jako:

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



  1. 2 způsoby, jak nahradit podřetězec v MongoDB

  2. Mohu upravit existující index v MongoDB, aniž bych jej zrušil?

  3. Chyba nesvázaného prvku integrace JHipster Redis

  4. Jak znovu použít připojení redis v socket.io?