Estoy creando una aplicación web usando Node y MongoDB Atlas. Necesito implementar una barra de búsqueda, que se usará para buscar una colección MongoDB en 2 campos particulares. Estaba investigando un poco sobre la mejor manera de construir esto, pero los documentos de Mongo son un poco confusos.
Estos documentos para Atlas Search mencionan una etapa de agregación de $search . Por otro lado, estos documentos para las etapas de agregación de MongoDB no mencionan en absoluto la etapa $search .
Quiero que la búsqueda sea 'borrosa', y esta respuesta dice que esto debe hacerse usando la expresión regular, pero no pude encontrar ninguna referencia para un operador $regex en los documentos de Atlas Search. Para una tarea anterior, creé una canalización de agregación en la que usé el operador $match con db.collection.aggregate() . Me parece que el operador $match también debería funcionar bien para la barra de búsqueda difusa, ya que me permitiría usar el operador $regex . Creo que $match también puede aprovechar cualquier índice que pueda crear en Atlas para sus consultas.
Entonces, mi pregunta es básicamente esta: ¿Cuál es la diferencia entre usar $search y $match ? ¿Uno ofrece beneficios de rendimiento/costo sobre el otro? ¿O son para diferentes casos de uso que me faltan por completo? Si usar $search es el camino a seguir, ¿cómo se haría la consulta para que sea borrosa? Estaré agradecido por cualquier ayuda.
$search es la mejor opción para implementar la función de búsqueda. Producirá resultados más precisos, ofrecerá funciones como resaltado y autocompletado, y será más eficaz para este caso de uso.
Mientras trabaja en la implementación, aquí están los documentos .
Así es como se verá una consulta simple con coincidencia aproximada, con los valores predeterminados para la configuración aproximada:
{ $search: { "index": <index name>, // optional, defaults to "default" "text": { "query": "queryText", "path": "<fields-to-search>", "fuzzy": { "maxEdits": 2 } } } }