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.
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.
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.
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
Dans
tu peux faire:
db.users.find({'name': {'$regex': 'sometext'}})
En PHP, vous pouvez utiliser le code suivant:
$collection->find(array('name'=> array('$regex' => 'm'));
Vous utiliseriez regex pour ça dans mongo.
par exemple: db.users.find({"name": /^m/})
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') } );
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.
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
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!