Chcę zapytać o coś za pomocą like
zapytania SQL :
SELECT * FROM users WHERE name LIKE '%m%'
Jak mogę osiągnąć to samo w MongoDB? Nie mogę znaleźć operatora like
w dokumentacji .
sql
mongodb
mongodb-query
sql-like
Freewind
źródło
źródło
5
głosy na tag operatora podobnego . Czy mogę prosić o zasugerowanie sql-like jako synonimu ?Odpowiedzi:
To musiałoby być:
lub podobne:
Szukasz czegoś, co zawiera gdzieś „m” (
%
operator SQL jest odpowiednikiem „Regexp.*
”), a nie czegoś, co „m” jest zakotwiczone na początku łańcucha.Uwaga: mongodb używa wyrażeń regularnych, które są silniejsze niż „LIKE” w sql. Za pomocą wyrażeń regularnych możesz stworzyć dowolny wzór, jaki sobie wyobrażasz.
Więcej informacji na temat wyrażeń regularnych można znaleźć pod tym linkiem https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
źródło
LIKE
zapytanie w SQL.javascript db.users.find({ "name": { $regex: /m/i } })
obecnie: paulo, patric
obecnie: paulo, patric
obecnie: pedro
źródło
select name from users;
co robi, co tylko listy wszystkich użytkowników?W
możesz to zrobić:
źródło
%sometext%
db.users.find({'name': {'$regex': 'sometext', '$options': 'i'}})
W PHP możesz użyć następującego kodu:
źródło
$collection.where(field => {"$regex" => value})
Używałbyś do tego wyrażeń regularnych w mongo.
na przykład:
db.users.find({"name": /^m/})
źródło
Istnieje już wiele odpowiedzi. Podaję różnego rodzaju wymagania i rozwiązania dotyczące wyszukiwania ciągów za pomocą wyrażenia regularnego.
Możesz zrobić z wyrażeniami regularnymi, które zawierają słowo tj. Podobne. Możesz także użyć
$options => i
do wyszukiwania bez rozróżniania wielkości literZawiera
string
Nie zawiera
string
tylko wyrażenia regularnegoDokładnie bez rozróżniania wielkości liter
string
Zacząć od
string
Kończyć z
string
Zachowaj to jako zakładkę i odniesienie do wszelkich innych potrzebnych zmian.
źródło
Masz 2 możliwości:
lub
Na drugim masz więcej opcji, takich jak „i” w opcjach wyszukiwania bez rozróżniania wielkości liter. Jeśli chodzi o „ciąg znaków”, możesz użyć na przykład „. Ciąg. ” (% Ciąg%) lub „ciąg. *” (Ciąg%) i „. * Ciąg) (% ciąg). Możesz użyć wyrażenia regularnego jak chcesz.
Cieszyć się!
źródło
Jeśli używasz node.js , oznacza to , że możesz napisać to:
Również , można napisać tak:
źródło
collection.where(field => Regexp.new(value))
Masz już odpowiedzi, ale aby dopasować wyrażenie regularne do nieuwzględniania wielkości liter
Możesz użyć następującego zapytania
Symbol
i
in/m/i
wskazuje niewrażliwość na wielkość liter i.pretty()
zapewnia ładniejszy wynikźródło
var search="feacebook"
więc jak mogę ustawić poniżej @ The6thSens Tak, aledb.users.find ({ "name" : /search/i } )
?Dla Mongoose w Node.js
źródło
Możesz użyć nowej funkcji 2.6 mongodb:
źródło
W projekcie nodejs i użyj mangusty użyj zapytania Like
źródło
searchQuery.product_name = '/'+req.query.search.value+'/i';
searchQuery.product_name= {$regex: req.query.search.value, $options: 'i'};
if(req.query.search.value){ searchQuery.product_name = {$regex: req.query.search.value, $options: 'i'}; searchQuery.sale_amount = {$regex: req.query.search.value, $options: 'i'}; searchQuery.sale_person = {$regex: req.query.search.value, $options: 'i'}; searchQuery.department_name = {$regex: req.query.search.value, $options: 'i'}; searchQuery.sale_date = {$regex: req.query.search.value, $options: 'i'}; }
czy możesz sprawdzić, dlaczego to nie działa?$regex: 'value'
generuje wyrażenie regularne dla wartości wyszukiwania i$options: 'i'
oznacza, że wielkość liter nie jest rozróżniana . Twój kod nie działa z powodu użyłeś samą wartość dla różnych własności i które działają jak i warunek, który należy spełnić nie ze swojej kolekcji bazy danych.Dla PHP mongo Like.
Miałem kilka problemów z php mongo jak. odkryłem, że konkatenacja parametrów wyrażenia regularnego pomaga w niektórych sytuacjach zaczyna się od pola znajdowania mongo PHP . Pomyślałem, że opublikuję tutaj, aby przyczynić się do bardziej popularnego wątku
na przykład
źródło
Działa także użycie literałów szablonów ze zmiennymi:
{"firstname": {$regex : `^${req.body.firstname}.*` , $options: 'si' }}
źródło
W MongoDB Compass musisz użyć składni trybu ścisłego, takiej jak:
(W kompasie MongoDB ważne jest, aby używać
"
zamiast'
)źródło
Możesz użyć instrukcji where do zbudowania dowolnego skryptu JS:
Odniesienie: http://docs.mongodb.org/manual/reference/operator/where/
źródło
$where
jest wysoce nieefektywny. Wykonaj pełny skan kolekcji :(W SQL zapytanie „ like ” wygląda następująco:
W konsoli MongoDB wygląda to tak:
Ponadto
pretty()
metoda będzie we wszystkich miejscach, w których sformatowana struktura JSON jest bardziej czytelna.źródło
Regex są drogie to proces.
Innym sposobem jest utworzenie indeksu tekstu, a następnie wyszukiwanie go za pomocą
$search
.Utwórz tekstowy Indeks pól, które chcesz umożliwić wyszukiwanie:
Wyszukaj ciąg w indeksie tekstowym:
źródło
W Go i sterowniku mgo:
gdzie wynik jest instancją struct poszukiwanego typu
źródło
bson:RegEx{Pattern:"m", Options:"i"}
zamiast tegoUżyj wyrażeń regularnych pasujących jak poniżej. „I” pokazuje niewrażliwość na wielkość liter.
źródło
Podobnie jak w przypadku zapytania, jak pokazano poniżej
dla interfejsu API Scala ReactiveMongo ,
źródło
Wydaje się, że istnieją powody stosowania zarówno
/regex_pattern/
wzorca javascript , jak i{'$regex': 'regex_pattern'}
wzoru mongo . Zobacz: Ograniczenia składni Reggo MongoBDTo nie jest kompletny samouczek RegEx, ale zainspirowałem się do uruchomienia tych testów po zobaczeniu wysoko głosowanego dwuznacznego postu powyżej .
źródło
Jeśli korzystasz z Mongodb Spring-Data, możesz to zrobić w następujący sposób:
źródło
Ponieważ regex obsługuje powłokę Mongo, jest to całkowicie możliwe.
Jeśli chcemy, aby zapytanie nie rozróżniało wielkości liter, możemy użyć opcji „i”, jak pokazano poniżej:
źródło
Jeśli chcesz wyszukać „Lubię to” w mongo, powinieneś użyć $ regex za pomocą tego zapytania
db.product.find({name:{$regex:/m/i}})
więcej można również przeczytać w dokumentacji. https://docs.mongodb.com/manual/reference/operator/query/regex/
źródło
Użyj wyszukiwania podciągów agregacji (z indeksem !!!):
źródło
{ "_id" : ObjectId("5aba5ad988385120a01b1ac2"), "fieldExists" : 4 }
Sznurek deepakparmar, dipak, parmar
ans deepakparmar
ans deepakparmar, dipak
ans deepakparmar, parmar
źródło
Znalazłem bezpłatne narzędzie do tłumaczenia zapytań MYSQL na MongoDB. http://www.querymongo.com/ Sprawdziłem kilka zapytań. jak widzę, prawie wszystkie z nich są poprawne. Zgodnie z tym, odpowiedź brzmi
źródło
MongoRegex został uznany za przestarzały.
Użyj MongoDB \ BSON \ Regex
źródło
Kiedy szukamy wzorców ciągów, zawsze lepiej jest użyć powyższego wzorca, ponieważ nie jesteśmy pewni wielkości liter. Mam nadzieję, że to pomaga !!!
źródło