Pregunta ¿Cómo consultar MongoDB con "me gusta"?


Quiero consultar algo como SQL like consulta:

select * 
from users 
where name like '%m%'

¿Cómo hacer lo mismo en MongoDB?
No puedo encontrar un operador para like en el documentaciones.


1061
2017-07-22 03:19


origen


Respuestas:


Eso debería ser:

db.users.find({"name": /.*m.*/})

o similar:

db.users.find({"name": /m/})

Está buscando algo que contenga "m" en alguna parte (SQL's)%'operador es equivalente a Regexp'.*'), no algo que tenga una "m" anclada al comienzo de la cadena.


1431
2017-07-22 03:57



db.users.insert({name: 'paulo'})
db.users.insert({name: 'patric'})
db.users.insert({name: 'pedro'})

db.users.find({name: /a/})  //like '%a%'

fuera: paulo, patric

db.users.find({name: /^pa/}) //like 'pa%' 

fuera: paulo, patric

db.users.find({name: /ro$/}) //like '%ro'

fuera: pedro


238
2018-05-20 13:26



En

  • PyMongo utilizando Pitón
  • Mangosta utilizando Node.js 
  • Jongo, utilizando Java
  • mgo, utilizando Ir

tu puedes hacer:

db.users.find({'name': {'$regex': 'sometext'}})

188
2017-10-07 17:07



En PHP, puedes usar el siguiente código:

$collection->find(array('name'=> array('$regex' => 'm'));

74
2018-05-13 08:36



Utilizarías expresiones regulares para eso en mongo.

p.ej: db.users.find({"name": /^m/})


42
2017-07-22 03:48



Si usas node.js, eso dice que puedes escribir esto:

db.collection.find( { field: /acme.*corp/i } );
//or
db.collection.find( { field: { $regex: 'acme.*corp', $options: 'i' } } );

también, puedes escribir esto:

db.collection.find( { field: new RegExp('acme.*corp', 'i') } );

24
2018-03-09 06:11



Ya hay muchas respuestas. Estoy dando diferentes tipos de requisitos y soluciones para la búsqueda de cadenas con expresiones regulares.

Puedes hacer con expresiones regulares que contengan la palabra i.e like. También puedes usar $options => i para búsqueda insensible a mayúsculas

Contiene string

db.collection.find({name:{'$regex' : 'string', '$options' : 'i'}})

No contiene string solo con expresiones regulares

db.collection.find({name:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})

Exactamente mayúsculas y minúsculas string

db.collection.find({name:{'$regex' : '^string$', '$options' : 'i'}})

Empezar con string

db.collection.find({name:{'$regex' : '^string', '$options' : 'i'}})

Terminar con string

db.collection.find({name:{'$regex' : 'string$', '$options' : 'i'}})

Mantener esta como un marcador, y una referencia para cualquier otra alteración que pueda necesitar.


22
2017-08-11 15:39



Ya tienes las respuestas, pero para que coincida con la expresión regular con insensibilidad de mayúsculas y minúsculas

Puedes usar la siguiente consulta

db.users.find ({ "name" : /m/i } ).pretty()

los i en el /m/i indica insensibilidad de mayúsculas y minúsculas .pretty() proporciona una salida más bonita


14
2017-11-21 05:39