it-swarm.com.de

Suchzeichenfolge mit Sonderzeichen im MongoDB-Dokument

Ich möchte nach Werten mit Sonderzeichen wie " $ / . @ > " in einem Dokument suchen.

Betrachten wir, ich habe myKey mit Werten wie "test$australia", "test$austria", "test$belgium", "green.africa".

Ich möchte mit '.*$aus.*', nach Werten suchen

Zum Beispiel, 

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

OR

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

Wie funktioniert die Abfrage? (.____.) Ich verwende MongoDB 2.4.1.

15
dex

Sie müssen $ durch \ entkommen:

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'});

Ausgabe so sein:

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

Hinweis: Willst du die spezielle Zeichenreihe alleine? 

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

Ausgabe so sein:

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

Sie können dies verwenden:

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

Sie können https://www.npmjs.com/package/regex-escape verwenden. Es ist eine gute Bibliothek, um Sonderzeichen zu maskieren und in regulären Ausdrücken zu verwenden

    var RegexEscape = require("regex-escape");

    let keyword = RegexEscape("{#/}");
    // => \{#\/\}


   db.myCollection.find({ myKey : { '$regex' : keyword, '$options' : 'mi' });
0
Falcon Ryu

Deaktivieren Sie alle Regex-Sonderzeichen:

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

Erstellen Sie eine Abfrage mit Regex und Option "i" (Fall ignorieren):

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

Führen Sie eine Suche mit einer Abfrage durch:

  db.collection.find(databaseQuery)

Hinweis: Vergessen Sie nicht, Indizes für die Felder zu erstellen, die Sie durchsuchen möchten. Indizierung von Feldern erhöht die Geschwindigkeit Ihrer Regex-Abfragen. In meinem Fall für das Feld "Name" würde es so aussehen: 

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