web-dev-qa-db-fra.com

Recherche de chaîne avec des caractères spéciaux dans un document MongoDB

Je souhaite rechercher des valeurs comportant des caractères spéciaux tels que " $ / . @ > " dans un document.

Considérons que j'ai myKey avec des valeurs comme "test$australia", "test$austria", "test$belgium", "green.africa".

Je veux rechercher des valeurs avec '.*$aus.*',

Par exemple, 

db.myCollection.find({ myKey : /.*$aus.*/i }); 

OR

db.myCollection.find({ myKey : { '$regex' : '.*$aus.*','$options' : 'i' });

Les requêtes ci-dessus ne fonctionnent pas, comment dois-je former une requête?.

15
dex

Vous devez échapper à $ par \:

db.myCollection.find({ myKey : /.*\$aus.*/i }); 
// OR
db.myCollection.find({myKey: { $regex: '.*\\$aus.*', $options: 'i'}})
14
db.test.insert({Word: 'hai('});
db.test.insert({Word: 'jana'});

Sortie soit comme ça:

{ "_id" : ObjectId("56f27fb71d843581261433c6"), "Word" : "hai(" }
{ "_id" : ObjectId("56f27ffe1d843581261433c8"), "Word" : "jana" }

Remarque: vous voulez que la ligne de caractères spéciaux soit seule 

db.test.find({Word:{$regex:"\\("}});

La sortie soit comme ça:

{ "_id" : ObjectId("56f27fb71d843581261433c6"), "Word" : "hai(" }
3
Jaj

Vous pouvez utiliser ceci:

db.myCollection.find({myKey:{ $regex:new RegExp('^' + 'test$australia'.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + '$', 'i')}})
1
Arjun G Perambra

Échappe à tous les caractères spéciaux regex:

  req.query.name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');

Créez une requête avec regex et option "i" (ignore case):

  const databaseQuery.name = new RegExp(`${req.query.name}`, 'i');

Effectuer une recherche avec une requête:

  db.collection.find(databaseQuery)

Remarque: n'oubliez pas de créer des index pour les champs dans lesquels vous allez effectuer une recherche. L'indexation des champs augmente la vitesse de vos requêtes regex . Dans mon cas, pour mon champ 'name', ce serait comme suit: 

  db.collection.createIndex({ name: "text" })
0
Hilarion Galushka