2017-07-17 4 views
0

Die Regex finden in Mongodb funktioniert eher wie ein Filter als eine Suche. Gibt es überhaupt eine Möglichkeit, die Ergebnisse basierend auf der Regex zu sortieren?sorting regex finden mongodb mongoose

S.S: Ich weiß MongoDB hat Volltextsuche, aber ich suche nach einer Lösung, die Ergebnis gibt, auch wenn Teilwort eingegeben wird.

Auch weiß ich, dass Lösungen wie MongoDB mit Elastic Search verbinden existieren, aber ich bin auf der Suche nach einer einfachen Lösung, die kein Hosting eines anderen Dienstes erfordert.

Auch Leistung ist kein Problem.

+3

Was meinst du mit "sortieren die Ergebnisse auf der Grundlage der Regex"? Es wäre sehr hilfreich, wenn Sie Ihre Frage auf ein bestimmtes Beispiel aktualisieren. – JohnnyHK

Antwort

0

$ regex ist verwendet nur für Feldtyp String.It funktioniert nicht mit anderen Arten

für kleines Beispiel Lassen Betrachten mit regex Operator Spielen

// nehmen Lassen Benutzermodell wie unten

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var UserSchema = new Schema({ 
    Name:String, 
    Age:Number, 
    Sex:Boolean, 
    EmailID:String, 
    PhoneNumber:String, 
    Description:String, 
    created_at:Date, 
    updated_at:Date 
}); 
module.exports = mongoose.model('UserSchema', UserSchema); 

Ihre mongodb Abfrage für Multi-Suche mit $ regex Operator und $ Optionen für Multi-Suche wird wie sein unter

var toSearch = req.body.searchvalue; 
var query = { 
    $or:[ 
     { 
      "Name":{ 
       $regex:toSearch, 
       $options:"i"  //it will match both upper case and lower case 
      } 
     }, 
     { 
      "EmailID":{ 
       $regex:toSearch, 
       $options:"i"  //it will match both upper case and lower case 
      } 
     }, 
     { 
      "PhoneNumber":{ 
       $regex:toSearch, 
       $options:"i"  //it will match both upper case and lower case 
      } 
     },{ 
      "Description":{ 
       $regex:toSearch, 
       $options:"i"  //it will match both upper case and lower case 
      } 
     } 
    ] 
} 
//Important point to remember we cannot use $regex for age,sex,created_at,updated_at because this field are not String 


UserSchema.find(query).toArray(function (err,SearchData) { 
    if(!err){ 
     //perform your operations 
    } 
}) ; 

Könnte dies Ihnen helfen und es ist am besten, Suchmaschine in mongodb zu erstellen. Es ist die nächste effektive für die elastische Suche, die Nr. 1