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

$skip a $limit v agregačním rámci

Vzhledem k tomu, že se jedná o textový vyhledávací dotaz, o kterém mluvíme, nejoptimálnější forma je tato:

db.collection.aggregate([
    { 
       "$match": {
               "$text": { "$search": "cake tea" }
    }
    },
    { "$sort": { "score": { "$meta": "textScore" } } },
    { "$limit": skip + limit },
    { "$skip": skip }
])

Zdůvodnění paměťové rezervy z výsledků nejvyššího „třídění“ bude fungovat pouze v rámci svých vlastních „limitů“, jak tomu bylo dříve, a to nebude optimální pro nic kromě několika rozumných „stránek“ dat.

Kromě toho, co je rozumné pro spotřebu paměti, bude mít další fáze pravděpodobně spíše negativní účinek než pozitivní.

Toto jsou skutečně praktická omezení možností textového vyhledávání dostupných pro MongoDB v aktuální podobě. Ale pro cokoli podrobnějšího a vyžadujícího vyšší výkon, pak stejně jako v případě mnoha „plnotextových“ řešení SQL je lepší použít externí „účelové“ řešení textového vyhledávání.



  1. delayed_jobs vs resque vs beanstalkd?

  2. Vytvořte index zástupných znaků v MongoDB

  3. Změňte typ pole v agregaci mongoDB a využívá $lookup index na polích nebo ne?

  4. vypnout redis-server z příkazového řádku