sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo consultar MongoDB para probar si existe un elemento?

Dado que no necesita el conteo, debe asegurarse de que la consulta regrese después de encontrar la primera coincidencia. Dado que el rendimiento de conteo no es ideal, eso es bastante importante. La siguiente consulta debería lograr eso:

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

Tenga en cuenta que find().count() por defecto no respetar el limit cláusula y, por lo tanto, podría devolver resultados inesperados (e intentará encontrar todas las coincidencias). size() o count(true) respetará la bandera de límite.

Si quiere ir a los extremos, debe asegurarse de que su consulta use índices cubiertos. Los índices cubiertos solo acceden al índice, pero requieren que el campo que consulta esté indexado. En general, eso debería funcionar porque un count() obviamente no devuelve ningún campo. Aún así, los índices cubiertos a veces necesitan cursores bastante detallados:

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

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

Desafortunadamente, count() no ofrece explain() , así que si vale la pena o no es difícil de decir. Como de costumbre, la medición es un mejor compañero que la teoría, pero la teoría al menos puede salvarlo de los problemas más grandes.