sql >> Databáze >  >> NoSQL >> Redis

Získání všech objektů python-rom do seznamu

S kódem, který jste poskytli, jsou dva problémy, které vysvětlují, proč získáváte výsledky, které dostáváte.

První problém je, že váš dotaz test.query.filter(url ='.').all() vrátí prázdný seznam. To vrátí prázdný seznam jednoduše proto, že nemáte platný index pro použití s ​​filtrem, který jste zadali. Pro tento sloupec máte 2 indexy - jedinečný index (užitečný pro vyhledávání adres URL podle přesného řetězce) a index přípony (užitečný pro hledání adres URL, které končí určitým řetězcem) - ale ani jeden nenabízí možnost filtrovat podle toho, co by bylo v relačním světě dotaz „jako“. Index předpony (vytvořený pomocí prefix=True ) vám umožní použít test.query.like(url='*.') , ale to by bylo velmi pomalé (provádí skenování indexu namísto přímého vyhledávání[1]).

Abychom předešli problémům souvisejícím s indexem/dotazem, jako je tento, přidal jsem výjimky QueryError, když se uživatelé pokoušejí filtrovat svá data podle indexů, které neexistují. Dnes večer s těmito změnami vydám 0.31.4 o něco později.

Druhá chyba, kterou máte a která je příčinou výjimky, je, že voláte .count() bez argumentu. V bodě vašeho h.count() volání, type(h) == list , a objekty seznamu Python vyžadují argument k počítání hodnot rovných zadanému argumentu v seznamu. Pokud jste přeskočili .all() část vašeho původního dotazu, dostanete objekt dotazu zpět. Tento objekt dotazu má .count() a vrátí počet odpovídajících výsledků.

[1] Ne všechny „like“ dotazy v ROM jsou pomalé, ale ty, které jsou rychlé, vyžadují předpony bez zástupných znaků, aby se omezily rozsahy dat pro skenování/filtrování.




  1. Chyba tornáda:[Errno 24] Chyba příliš mnoha otevřených souborů

  2. Transakce Mongo DB 4.0 s Mongoose &NodeJs, Express

  3. Jak spustit server Redis A další aplikaci v Dockeru?

  4. Mongodb nelze spustit