2016-03-31 2 views
1

J'ai une boîte de saisie auto complète sur laquelle je travaille et j'essaie de créer un point de terminaison mongoose qui me procurera des objets utilisateur basés sur les données de l'entrée. Les données peuvent être incomplètes, mais il devrait tout de même obtenir tout ce qui est similaire. par exemple:Mongoose: Trouver un nom similaire à l'entrée

var input = "st"; 

// Should return a user object like this one. 

var userObject = { 
    name: { 
    full: 'Stephen Brinkworth', 
    first: 'Stephen', 
    last: 'Brinkworth' 
    } 
}; 

J'ai examiné la question et de ce que je l'ai vu, le point final recommandé ressemble à ceci.

User.find({name: {full: new RegExp(req.query.input, 'i')}}).exec(...); 

Le seul problème que j'ai, c'est que lorsque j'utilise ce point de terminaison, je récupère systématiquement un tableau vide. Est-ce que quelqu'un peut m'aider avec ça? Merci beaucoup.

Répondre

0

Vous aurez besoin d'employer l'utilisation de $regex opérateur de requête de MongoDB:

offre des capacités d'expression régulière pour les chaînes de correspondance de motif dans les requêtes.

L'opérateur $regex peut être utilisé avec l'une de la syntaxe suivante comme indiqué dans la documentation:

{ <field>: { $regex: /pattern/, $options: '<options>' } } 
{ <field>: { $regex: 'pattern', $options: '<options>' } } 
{ <field>: { $regex: /pattern/<options> } } 

Une solution simple en utilisant l'opérateur $regex serait:

var nameRegex = new RegExp(req.query.input); 
User.find({'name.full': {$regex: nameRegex, options: 'i'}}); 
+0

qui a fonctionné merci :) J'avais juste besoin d'utiliser 'name.full' et ça fonctionnait correctement dans les deux sens. – Xoman5144