MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como consultar o MongoDB para testar se existe um item?


Como você não precisa da contagem, verifique se a consulta retornará depois de encontrar a primeira correspondência. Como o desempenho da contagem não é ideal, isso é bastante importante. A consulta a seguir deve fazer isso:
db.Collection.find({ /* criteria */}).limit(1).size();

Observe que find().count() por padrão não respeitar o limit cláusula e, portanto, pode retornar resultados inesperados (e tentará encontrar todas as correspondências). size() ou count(true) honrará a bandeira de limite.

Se você quiser ir ao extremo, certifique-se de que sua consulta use índices cobertos. Os índices cobertos acessam apenas o índice, mas exigem que o campo que você consulta seja indexado. Em geral, isso deve funcionar porque um count() obviamente não retorna nenhum campo. Ainda assim, os índices cobertos às vezes precisam de cursores bastante detalhados:
db.values.find({"value" : 3553}, {"_id": 0, "value" : 1}).limit(1).explain();

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

Infelizmente, count() não oferece explain() , então se vale a pena ou não é difícil dizer. Como de costume, a medição é uma companhia melhor do que a teoria, mas a teoria pode pelo menos salvá-lo dos problemas maiores.