sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb uppdaterar ett begränsat antal dokument

Per Sammaye, det verkar inte som att det finns ett "riktigt" sätt att göra detta. Min lösning var att skapa en sekvens som beskrivs på mongowebbplatsen och lägg helt enkelt till ett "seq"-fält till varje post i min samling. Nu har jag ett unikt fält som är tillförlitligt sorterbart att uppdatera på.

Tillförlitligt sorterbart är viktigt här. Jag tänkte bara sortera på det autogenererade _id men jag insåg snabbt att naturlig ordning INTE är detsamma som stigande ordning för ObjectId:s (från denna sida det ser ut som att strängvärdet har företräde framför objektvärdet som matchar beteendet jag observerade vid testning). Det är också fullt möjligt för en post att flyttas till disk, vilket gör den naturliga ordningen opålitlig för sortering.

Så nu kan jag fråga efter posten med den minsta "seq" som INTE redan har uppdaterats för att få en inkluderande startpunkt. Därefter frågar jag efter poster med 'seq' större än min utgångspunkt och hoppar över (det är viktigt att hoppa över eftersom 'seq' kan vara sparsamt om du tar bort dokument, etc...) antalet poster jag vill uppdatera. Sätt en gräns på 1 på den frågan och du har en icke-inkluderande slutpunkt. Nu kan jag utfärda en uppdatering med en fråga om 'updated' =0, 'seq'>=min startpunkt och

Här är stegen igen:

  1. skapa en automatisk ökningssekvens med findAndModify
  2. lägg till ett fält i din samling som använder den automatiska ökningssekvensen
  3. fråga för att hitta en lämplig startpunkt:db.xx.find({ uppdaterad:0 }).sort({ seq:1 }).limit(1)
  4. fråga för att hitta en lämplig slutpunkt:db.xx.find({ seq:{ $gt:startSeq }}).sort({ seq:1 }).skip(updateCount).limit(1)
  5. uppdatera samlingen med hjälp av start- och slutpunkterna:db.xx.update({ updated:0, seq:{ $gte:startSeq }, seq:{ $lt:endSeq }, $isolated:1}, { updated :1 },{ multi:true })

Ganska smärtsamt men det får jobbet gjort.




  1. Prestandanackdel med slug som primärnyckel/_id i mongo?

  2. MongoDB NOW Aggregationsvariabel

  3. mongodb &max anslutningar

  4. hur man använder $project return nest array efter $lookup i mongodb