2013-05-15 11 views
12

Ich möchte Werte mit Sonderzeichen wie " $/. @ > " in einem Dokument suchen.Suche Zeichenfolge mit Sonderzeichen in MongoDB Dokument

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

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

Zum Beispiel

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

ODER

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

Above Anfragen funktionieren nicht, ho w soll ich eine Anfrage stellen? Ich benutze MongoDB 2.4.1.

Antwort

12

Sie haben zu entkommen $ von \:

db.myCollection.find({ myKey : /.*\$aus.*/i }); 
// OR 
db.myCollection.find({myKey: { $regex: '.*\\$aus.*', $options: 'i'}}) 
+0

Könnten Sie bitte entfernen qr Operator, der nicht in der Konsole benötigt wird .. Ich habe in der Frage auch bearbeitet. Es hat funktioniert. – dex

+0

Auch wie kann ich das gleiche mit REGEX-Option erreichen. – dex

+1

Sie müssen den umgekehrten Schrägstrich in der Regex-Zeichenfolge in der Mongo-Json-Abfrage verdoppeln: 'db.myCollection.find ({myKey: {$ regex: '. * \\ $ aus. *', $ Options: 'i'}}) ' –

3
db.test.insert({word: 'hai('}); 
db.test.insert({word: 'jana'}); 

Ausgabe aussehen:

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

Hinweis: Möchten Sie die besondere char Zeile allein so

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

Ausgabe sein wie folgt:

{ "_id" : ObjectId("56f27fb71d843581261433c6"), "word" : "hai(" }