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

Jak se dotazovat MongoDB, abyste otestovali, zda položka existuje?

Vzhledem k tomu, že počet nepotřebujete, měli byste se ujistit, že se dotaz vrátí poté, co nalezne první shodu. Protože výkon počítání není ideální, je to spíše důležité. Toho by měl dosáhnout následující dotaz:

db.Collection.find({ /* criteria */}).limit(1).size();

Všimněte si, že find().count() ve výchozím nastavení ne dodržujte limit klauzule a může tedy vrátit neočekávané výsledky (a pokusí se najít všechny shody). size() nebo count(true) bude respektovat příznak limitu.

Pokud chcete jít do extrémů, měli byste se ujistit, že váš dotaz používá kryté indexy. Zakryté indexy přistupují pouze k indexu, ale vyžadují, aby pole, na které se dotazujete, bylo indexováno. Obecně by to mělo fungovat, protože count() zjevně nevrací žádná pole. Pokryté indexy však někdy potřebují spíše podrobné kurzory:

db.values.find({"value" : 3553}, {"_id": 0, "value" : 1}).limit(1).explain();

{
  // ...
  "cursor" : "BtreeCursor value_1",
  "indexOnly" : true,  // covered!
}

Bohužel count() nenabízí explain() , takže jestli to stojí za to nebo ne, těžko říct. Jako obvykle je měření lepším společníkem než teorie, ale teorie vás může alespoň zachránit od větších problémů.



  1. Filtrační prvky v Redis

  2. MongoDB $ sinh

  3. Jak serializovat mapu v Javě pro uložení v Redis?

  4. Implementace pub/sub v nodeJS