2016-11-21 8 views
0

Я хочу создать расширенный поиск в проекте, который находится в узле JS с Mongo DB. Я создал поле в БД, которое является ключом поиска. пользователь может ввести любое слово в текстовое поле, и я хочу совместить это слово в строке и получить результат. ниже моей структуры и кода db. моя работа с кодом работает только с первым словом строки, а не с поиском во всей строке.Поиск любого слова в строке mongodb с узлом js

DB : 
{ 
"_id": ObjectId("001"), 
"searchkey": "Test Product Test Product T-shirt Half sleeves Adidas" 
} 
{ 
"_id": ObjectId("123"), 
"searchkey": "boy test Product Test Product T-shirt Half sleeves Nike" 
} 
{ 
"_id": ObjectId("456"), 
"searchkey": "girl test Product Summer Product T-shirt full sleeves Adidas" 
} 
{ 
"_id": ObjectId("789"), 
"searchkey": "any product any Product any Product T-shirt full sleeves Adidas" 
} 
{ 
"_id": ObjectId("1010"), 
"searchkey": "woodland Product woodland Product T-shirt Half sleeves woodland" 
} 
{ 
"_id": ObjectId("1212"), 
"searchkey": "Summer Product Test Product T-shirt Half sleeves Adidas" 
} 

My Query : 

Collection.find({searchkey : {$regex: new RegExp('^' + search.toLowerCase(), 'i')},searchkey : {$regex: new RegExp('^' + search.toUpperCase(), 'i')},is_active:true},function(error,fetchSearch){ 
console.log(fetchSearch); 
}); 

Если я искать test or TEST это даст мне только один результат, что идентификатор 001 и остальную часть результата не совпадает со всей строки.

Я хочу, как если бы я искал summer или Summer, что он даст мне 456 and 1212 _Id данные.

ответ

2

Вы проверяете, начинается ли строка с строки поиска пользователя.

^ = означает начало строки, поэтому '^' + search.toLowerCase() означает поиск строки, которая начинается с search.toLowerCase(), и все. Если он не начнет с строки поиска - он не будет совпадать. Вот почему для test только id 001 получить соответствие.

Измените свой шаблон поиска на: '.*' + search.toLowerCase() + '.*', чтобы найти строку поиска в любом месте внутри строк.

Here is the new regex, вы можете увидеть это сопоставление 'Лето' и с 456 и 1212

+0

это означает, что теперь мой запрос как ниже –

+1

Collection.find ({searchkey : {$ regex: new RegExp ('. *' + search.toLowerCase() + '. *', 'i')}, searchkey: {$ regex: новый RegExp ('. *' + search.toUpperCase() + '. *', 'i')}, is_active: true}, function (error, fetchSearch) { console.log (fetchSearch); }); –

+0

Спасибо, сэр (лук) –

1

Измените запрос так:

db.getCollection('Stackoverflow').find({ searchkey: {$regex: "test", $options: "$i"}}) 

 Смежные вопросы

  • Нет связанных вопросов^_^