Saltar al contenido

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

Al fin luego de tanto luchar hemos encontrado la respuesta de este dilema que algunos lectores de nuestro sitio web presentan. Si tienes alguna información que aportar puedes aportar tu información.

Solución:

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 lo hace no honrar 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 hacerlo 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.

No creo que haya una forma directa de verificar la existencia del artículo por su valor. Pero podría hacerlo simplemente recuperando solo la identificación (con selección de campo)

db.your_collection.find(..criteria.., "_id" : 1);

A partir de Mongo 2.6, count tiene un limit parámetro opcional, lo que lo convierte en una alternativa viable para saber si un documento existe o no:

db.collection.count(,  limit: 1 )
// returns 1 if exists and 0 otherwise

o con una consulta de filtrado:

db.collection.count(/* criteria */,  limit: 1 )

Limitar el número de coincidencias hace que el análisis de la colección se detenga cada vez que se encuentra una coincidencia en lugar de revisar toda la colección.


A partir de Mongo 4.0.3ya que count() se considera obsoleto podemos usar countDocuments en lugar de:

db.collection.countDocuments(,  limit: 1 )

o con una consulta de filtrado:

db.collection.countDocuments(/* criteria */,  limit: 1 )

Comentarios y puntuaciones

Recuerda dar recomendación a esta crónica si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *