Question Comment interroger MongoDB avec "like"?


Je veux interroger quelque chose comme SQL like question:

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

Comment faire la même chose dans MongoDB?
Je ne peux pas trouver un opérateur pour like dans le documentations.


1061
2017-07-22 03:19


origine


Réponses:


Cela devrait être:

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

ou similaire:

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

Vous cherchez quelque chose qui contient "m" quelque part (SQL '%'opérateur est équivalent à Regexp'.*'), pas quelque chose qui a "m" ancré au début de la chaîne.


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%'

sortie: paulo, patric

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

sortie: paulo, patric

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

sortir: pedro


238
2018-05-20 13:26



Dans

  • PyMongo en utilisant Python
  • Mangouste en utilisant Node.js 
  • Jongo, en utilisant Java
  • mgo, en utilisant Aller

tu peux faire:

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

188
2017-10-07 17:07



En PHP, vous pouvez utiliser le code suivant:

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

74
2018-05-13 08:36



Vous utiliseriez regex pour ça dans mongo.

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


42
2017-07-22 03:48



Si vous utilisez node.js, il dit que vous pouvez écrire ceci:

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

Aussi, vous pouvez écrire ceci:

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

24
2018-03-09 06:11



Il y a déjà beaucoup de réponses. Je donne différents types d'exigences et de solutions pour la recherche de chaînes avec regex.

Vous pouvez faire avec regex qui contient le mot que j'aime. Vous pouvez également utiliser $options => i pour une recherche insensible à la casse

Contient string

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

Ne contient pas string seulement avec regex

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

Insensible à la casse string

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

Commencer avec string

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

Terminer par string

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

Garder ce comme un signet, et une référence pour toutes les autres modifications dont vous pourriez avoir besoin.


22
2017-08-11 15:39



Vous avez déjà obtenu les réponses, mais pour correspondre à regex avec insensibilité à la casse

Vous pouvez utiliser la requête suivante

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

le i dans le /m/i indique une insensibilité à la casse et .pretty() fournit une sortie plus jolie


14
2017-11-21 05:39



Vous avez 2 choix:

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

ou

db.users.find({"name": {"$regex": "string", "$options": "i"}})

Sur la seconde vous avez plus d'options, comme "je" dans les options pour trouver en utilisant insensible à la casse. Et à propos de la "chaîne", vous pouvez utiliser comme ".chaîne."(% string%), ou" string. * "(string%) et". * string) (% string) par exemple. Vous pouvez utiliser l'expression régulière comme vous le souhaitez.

Prendre plaisir!


13
2018-04-26 02:48