sql >> Database >  >> NoSQL >> MongoDB

MongoDB:kan geen cursor gebruiken om door alle gegevens te bladeren

Over het algemeen wel. Als je een monotoon veld hebt, idealiter een geïndexeerd veld, kun je daar gewoon langs lopen. Als u bijvoorbeeld velden van het type ObjectId . gebruikt als primaire sleutel of als u een CreatedDate . heeft of zoiets, je kunt gewoon een $lt . gebruiken query, neem een ​​vast aantal elementen en zoek opnieuw met $lt van de kleinste _id of CreatedDate die u in de vorige batch bent tegengekomen.

Wees voorzichtig met strikt monotoon gedrag versus niet-strikt monotoon gedrag:mogelijk moet u $lte gebruiken als de sleutels niet streng zijn, voorkom dan dat je twee keer dingen doet voor de dupes. Sinds de _id veld is uniek, ObjectIds zijn altijd strikt monotoon.

Als je zo'n sleutel niet hebt, ligt het wat lastiger. Je kunt nog steeds 'langs de index' itereren (welke index dan ook, of het nu een naam, een hash, een UUID, Guid, etc. is). Dat werkt net zo goed, maar het is moeilijk om snapshots te maken, omdat je nooit weet of het resultaat dat je zojuist hebt gevonden, is ingevoegd voordat je begon te reizen, of niet. Ook wanneer documenten aan het begin van de traversal worden ingevoegd, worden deze gemist.




  1. Mongo-databases synchroniseren op verschillende servers

  2. MongoDB $mod

  3. Veld van array-element toevoegen in MongoDB-aggregatie

  4. ingesloten document versus hash-gegevenstype in mongoïde