sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan gemmer man resultater fra dynamisk genererede formularer i MongoDb?

Jeg ville ikke gemme resultater som indlejrede dokumenter i form dokument, da du måske ikke kender a priori hvor mange indlæg man kan forvente. MongoDB begrænser hvert dokument til 16 MB, men i praksis vil du sandsynligvis holde dig et godt stykke under denne tærskel.

Da dine formularer er variable, men forudbestemte (det vil sige, at hver formular kan variere, men formularerne er defineret på forhånd i en form for administrationsbrugergrænseflade), vil jeg anbefale at bruge to samlinger:

Den første (kald den forms). ) vil gemme data om sammensætningen af ​​hver formular:hvilke felter, hvilke typer, i hvilken rækkefølge osv. Du kunne forestille dig, at dokumenter i denne samling ville se sådan ud:

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

Dette lader dig konstruere formularerne dynamisk (sammen med noget server-side-kode) efter behov for visning i din applikation. Det giver også information om, hvad felterne er, og hvilken validering der kræves for dem, som du kan bruge under indsendelse af formularen. Du vil have et indeks over URL-adresser eller et hvilket som helst felt, du bruger til at bestemme, hvilken formular der skal vises, når du sender webanmodninger.

Den anden samling, submissions eller noget, ville gemme de indsendte data for hver formular. Dokumenter vil se sådan ud:

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

Hvis du har brug for at kunne søge efter felt-værdi-par (eller bare værdier) i de indsendte formularer, bruger en variation af dette et array for values felt, som:

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

Du kan derefter oprette et indeks på values felt, og søg som:

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

Eller opret et indeks på "values.value" og søg som:

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



  1. Hvorfor kan Travis ikke oprette forbindelse, brug Redis cache_store, når den implementeres til Heroku?

  2. MongoDB 3 Java tjek om samling findes

  3. Opret et tekstindeks med forskellige feltvægte i MongoDB

  4. Hvor er meteor MongoDB-databasen?