sql >> Databáze >  >> NoSQL >> MongoDB

Rozsah dotazu pro stránkování MongoDB

Je naprosto v pořádku použít ObjectId(), ačkoli vaše syntaxe pro stránkování je nesprávná. Chcete:

 db.tweets.find().limit(50).sort({"_id":-1});

To říká, že chcete tweety seřadit podle _id hodnotu v sestupném pořadí a chcete nejnovějších 50. Váš problém je ve skutečnosti, že stránkování je složité, když se aktuální sada výsledků mění - takže místo použití přeskočení na další stránku si chcete poznamenat nejmenší _id ve výsledkové sadě (50. nejnovější _id hodnotu a poté získat další stránku s:

 db.tweets.find( {_id : { "$lt" : <50th _id> } } ).limit(50).sort({"_id":-1});

Získáte tak další „nejnovější“ tweety, aniž by nové příchozí tweety narušily vaše stránkování v čase.

Není absolutně nutné se starat o to, zda _id hodnota přesně odpovídá objednávce vložení – bude to z 99,999 % dostatečně blízko a nikoho ve skutečnosti na nižší úrovni nezajímá, který tweet přišel jako první – můžete si dokonce všimnout, že Twitter často zobrazuje tweety mimo pořadí, jen to není tak kritické.

Pokud je kritické, pak byste museli použít stejnou techniku, ale s „datem tweetu“, kde by toto datum muselo být spíše časovým razítkem než pouhým datem.



  1. podporuje hibernate-redis mezipaměť 2. úrovně sdílenou různými instancemi hibernace

  2. Řadit pomocí MongoEngine?

  3. jak uložit obrázek do redis pomocí pythonu / PIL

  4. Mongo update element pole (.NET driver 2.0)