ventajas tutorial example desventajas descargar caracteristicas mongodb

mongodb - tutorial - Comprobando si un campo contiene una cadena



mongodb ventajas y desventajas (8)

A partir de la versión 2.4, puede crear un índice de texto en los campos para buscar y usar el operador $text para realizar consultas.

Primero, crea el índice:

db.users.createIndex( { "username": "text" } )

Entonces, para buscar:

db.users.find( { $text: { $search: "son" } } )

Puntos de referencia (~ 150K documentos):

  • Regex (otras respuestas) => 5.6-6.9 segundos
  • Búsqueda de texto => .164-.201 segundos

Notas:

  • Una colección solo puede tener un índice de texto. Puede usar un índice de texto comodín si desea buscar cualquier campo de cadena, como este: db.collection.createIndex( { "$**": "text" } ) .
  • Un índice de texto puede ser grande. Contiene una entrada de índice para cada palabra única derivada posterior en cada campo indexado para cada documento insertado.
  • Un índice de texto tardará más en construirse que un índice normal.
  • Un índice de texto no almacena frases o información sobre la proximidad de las palabras en los documentos. Como resultado, las consultas de frases se ejecutarán de manera mucho más efectiva cuando toda la colección se ajuste a la RAM.

Estoy buscando un operador, que me permita verificar si el valor de un campo contiene una cadena determinada.

Algo como:

db.users.findOne({$contains:{"username":"son"}})

¿Es eso posible?


Cómo ignorar las etiquetas HTML en una coincidencia RegExp:

var text = ''<p>The <b>tiger</b> (<i>Panthera tigris</i>) is the largest <a href="/wiki/Felidae" title="Felidae">cat</a> <a href="/wiki/Species" title="Species">species</a>, most recognizable for its pattern of dark vertical stripes on reddish-orange fur with a lighter underside. The species is classified in the genus <i><a href="/wiki/Panthera" title="Panthera">Panthera</a></i> with the <a href="/wiki/Lion" title="Lion">lion</a>, <a href="/wiki/Leopard" title="Leopard">leopard</a>, <a href="/wiki/Jaguar" title="Jaguar">jaguar</a>, and <a href="/wiki/Snow_leopard" title="Snow leopard">snow leopard</a>. It is an <a href="/wiki/Apex_predator" title="Apex predator">apex predator</a>, primarily preying on <a href="/wiki/Ungulate" title="Ungulate">ungulates</a> such as <a href="/wiki/Deer" title="Deer">deer</a> and <a href="/wiki/Bovid" class="mw-redirect" title="Bovid">bovids</a>.</p>''; var searchString = ''largest cat species''; var rx = ''''; searchString.split('' '').forEach(e => { rx += ''(''+e+'')((?://s*(?:<//?//w[^<>]*>)?//s*)*)''; }); rx = new RegExp(rx, ''igm''); console.log(text.match(rx));

Probablemente sea muy fácil convertirlo en un filtro de agregación de MongoDB.



Como este es uno de los primeros éxitos en los motores de búsqueda, y ninguno de los anteriores parece funcionar para MongoDB 3.x, aquí hay una búsqueda de expresiones regulares que funciona:

db.users.find( { ''name'' : { ''$regex'' : yourvalue, ''$options'' : ''i'' } } )

No hay necesidad de crear un índice adicional o similar.


Esto es lo que debe hacer si está conectando MongoDB a través de Python

db.users.find({"username": {''$regex'' : ''.*'' + ''Son'' + ''.*''}})

También puede usar un nombre de variable en lugar de ''Son'' y, por lo tanto, la concatenación de cadenas.


La forma más sencilla de realizar esta tarea.

Si desea que la consulta distinga entre mayúsculas y minúsculas

db.getCollection("users").find({''username'':/Son/})

Si desea que la consulta no distinga mayúsculas de minúsculas

db.getCollection("users").find({''username'':/Son/i})


Puedes hacerlo con el siguiente código.

db.users.findOne({"username" : {$regex : ".*son.*"}});