sql >> Database >  >> NoSQL >> MongoDB

MongoDB:moet u vooraf een document toewijzen als u $addToSet of $push gebruikt?

Het wordt aanbevolen als het haalbaar is voor de use case, wat meestal niet het geval is. Tijdreeksgegevens vormen een opmerkelijke uitzondering. Het is niet echt van toepassing op $addToSet en $push omdat ze de neiging hebben om de grootte van het document te vergroten door een array te laten groeien.

Hou op. Weet u zeker dat u constant groeiende arrays wilt met tienduizenden items? Ga je een vraag stellen om specifieke vermeldingen terug te willen? Ga je velden in de array-items indexeren? U wilt waarschijnlijk uw documentstructuur heroverwegen. Misschien wil je elke data invoer om een ​​afzonderlijk document te zijn met velden als market , type , createdAt in elk gerepliceerd? U hoeft zich geen zorgen te maken over documentverplaatsingen.

Waarom zal de array groeien tot 75K inzendingen? Kunt u minder boekingen per document doen? Zijn dit tijdreeksgegevens ? Het is geweldig om documenten vooraf toe te wijzen en interne updates uit te voeren met de mmap-opslagengine, maar het is niet haalbaar voor elke gebruikssituatie en het is geen vereiste voor MongoDB om goed te presteren.

Nee, dit is niet echt handig. De documentgrootte wordt berekend op basis van de BSON-grootte van de null-waarden in de array, dus wanneer u null vervangt met een ander type wordt de grootte groter en krijg je hoe dan ook documentherschrijvingen. U zou de array vooraf moeten toewijzen met objecten waarbij alle velden zijn ingesteld op een standaardwaarde voor het type, bijvoorbeeld

{
    "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. Moeten we dbref of ingesloten document gebruiken in een leeszware toepassing?

  2. Mongoose-aggregaat geeft leeg resultaat

  3. Hoe werk ik MongoDB-documentvelden alleen bij als ze niet bestaan?

  4. Verwijder subvelden uit mongoDb-document