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

MongoDB:Skal du forhåndstildele et dokument, hvis du bruger $addToSet eller $push?

Det anbefales, hvis det er muligt for brugssagen, hvilket det normalt ikke er. Tidsseriedata er en bemærkelsesværdig undtagelse. Det gælder ikke rigtigt med $addToSet og $push fordi de har en tendens til at øge størrelsen af ​​dokumentet ved at vokse en matrix.

Hold op. Er du sikker på, at du vil have konstant voksende arrays med titusindvis af poster? Skal du forespørge og have specifikke poster tilbage? Vil du indeksere nogle felter i array-indgangene? Du vil sandsynligvis genoverveje din dokumentstruktur. Måske vil du have hver data indgang til at være et separat dokument med felter som market , type , createdAt replikeres i hver? Du ville ikke bekymre dig om dokumentflytninger.

Hvorfor vil arrayet vokse til 75.000 poster? Kan du lave færre poster pr. dokument? Er dette tidsseriedata a> ? Det er fantastisk at være i stand til at forhåndstildele dokumenter og lave opdateringer på stedet med mmap-lagringsmotoren, men det er ikke muligt for alle brugssager, og det er ikke et krav for, at MongoDB skal fungere godt.

Nej, det er ikke rigtig nyttigt. Dokumentstørrelsen vil blive beregnet ud fra BSON-størrelsen af ​​null-værdierne i arrayet, så når du erstatter null med en anden type vil størrelsen øges, og du vil alligevel få dokumentomskrivninger. Du skal forudallokere arrayet med objekter med alle felter sat til en standardværdi for dens type, f.eks.

{
    "date" : ISODate("1970-01-01T00:00:00Z")    // use a date type instead of a string date
    "price" : 0,
    "amount" : 0,
    "tid" : "000000", // assuming 7 character code - strings icky for default preallocation
    "type" : "none"    // assuming it's "buy" or "sell", want a default as long as longest real values
}


  1. Mongodb atlas + node.js arbejder lokalt, men stopper, når de skubbes til Heroku

  2. Hvordan udfører jeg et fund ved hjælp af $geoIntersects / 2dsphere i et array-underfelt?

  3. MongoDB-forespørgsel med flere betingelser og udsnit

  4. Sådan laver du en forespørgsel med eller betingelse i mongoid