sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur frågar man MongoDB för att testa om en vara finns?

Eftersom du inte behöver räkningen bör du se till att frågan kommer tillbaka efter att den hittat den första matchningen. Eftersom räkningsprestanda inte är idealiskt, är det ganska viktigt. Följande fråga bör åstadkomma det:

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

Observera att find().count() som standard inte respektera limit klausul och kan därför ge oväntade resultat (och kommer att försöka hitta alla matchningar). size() eller count(true) kommer att hedra gränsflaggan.

Om du vill gå till ytterligheter bör du se till att din fråga använder täckta index. Täckta index får bara tillgång till indexet, men de kräver att fältet du frågar i är indexerat. I allmänhet borde det göra det eftersom en count() returnerar uppenbarligen inga fält. Ändå behöver täckta index ibland ganska utförliga markörer:

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

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

Tyvärr, count() erbjuder inte explain() , så om det är värt det eller inte är svårt att säga. Som vanligt är mätning en bättre följeslagare än teori, men teori kan åtminstone rädda dig från de större problemen.



  1. Python Reddis Queue ValueError:Funktioner från modulen __main__ kan inte bearbetas av arbetare

  2. redis:säkerhetskopiera dump.rdb

  3. Redis Cluster - produktionsklar?

  4. AWS Lambda och Redis klient. Varför kan jag inte ringa tillbaka?