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

Lazy Loading/ More Data Scroll i Mongoose/Nodejs

Det generelle koncept for "paging" er at bruge .skip() som i det væsentlige "springer" over de resultater, der allerede er blevet hentet, så du i det væsentlige kan gøre dette:

var q = Post.find().sort( "rating" ).skip(10).limit(10);

Men i virkeligheden, som du kan forestille dig, vil dette gå meget langsommere, når du får et par "sider" ind. Så du vil virkelig gerne have noget smartere. I bund og grund er dette en "områdeforespørgsel", hvor du ønsker at få højere (eller lavere, hvis faldende ) resultater end det sidste sæt af resultater, der blev hentet. Så givet den sidste værdi af 5 så for større end du ville gøre:

var q = Post.find({ "rating": { "$gt": 5 } }).sort( "rating" ).limit(10);

Ser okay ud, men der er virkelig stadig et problem. Hvad hvis den næste "side" også indeholdt resultater med en vurdering på 5? Denne forespørgsel ville springe over dem og aldrig vise dem.

Den smarte ting at gøre er at "beholde" hele _id værdier fra dokumentet, da de er unikke nøgler. Anvend grundlæggende den samme slags ting, bortset fra at denne gang sikrer du dig, at du ikke inkluderer resultaterne fra den forrige side i din nye. $nin operatør hjælper her:

var q = Post.find({ "rating": { "$gte": 5 }, "_id": { "$nin": seenIds } })
    .sort( "rating" ).limit(10);

Om seenIds er blot den sidste side med resultater eller noget mere afhænger af "densiteten" af den værdi, du sorterer efter, og du skal selvfølgelig "beholde" disse i en sessionsvariabel eller noget.

Men prøv at tilpasse dette, da rækkeviddeforespørgsler normalt er dit bedste resultat.




  1. MongoDB $minut

  2. pymongo.errors.ConnectionFailure:kunne ikke oprette forbindelse til localhost:27017:[Errno 111] Forbindelse afvist

  3. Brug af variabler i MongoDB-opdateringserklæring

  4. MongoDB Langsom forespørgsel efter ID