konto usunięte

Temat: Problematyczne wyrażenie regularne

W związku z tym, że z MySQL przechodzę na MongoDB i jestem
zmuszony z poczciwych LIKE i NOT LIKE przejść na typowe regexpy,
mam pytanie do znawców w temacie: czy jest mi ktoś w stanie
powiedzieć jak powinno wyglądać wyrażenie regularne, które
dopasuje rekordy zawierające ciąg "abc" i "def" i nie zawierające
ciągu "ghi", czyli odpowiednik SQLowego:

... WHERE (col LIKE "%abc%" OR col LIKE "%def%") AND col NOT 	
LIKE "%ghi%"


Mam problem głównie z zastosowaniem "NOT LIKE" w wyrażeniu
regularnym.

Istotnym jest fakt, iż ilość ciągów dla LIKE oraz NOT LIKE jest
zmienna.

Z góry dzięki za pomoc :)
Wojciech Sznapka

Wojciech Sznapka CTO @ STS Zakłady
Bukmacherskie

Temat: Problematyczne wyrażenie regularne

taki regexp będzie trudny, ale można zrobić to tak:
dane:

> db.foo.find()
{ "_id" : ObjectId("4c7ed4fa01e4ee4667d07d8b"), "a" : "111abc111" }
{ "_id" : ObjectId("4c7ed52a01e4ee4667d07d8c"), "a" : "222def222" }
{ "_id" : ObjectId("4c7ed53001e4ee4667d07d8d"), "a" : "222def222ghi" }
{ "_id" : ObjectId("4c7ed53601e4ee4667d07d8e"), "a" : "111abc111ghi" }


zapytanie:

> db.foo.find({a: /(abc|def)/, a: {$not: /(ghi)/}});
{ "_id" : ObjectId("4c7ed4fa01e4ee4667d07d8b"), "a" : "111abc111" }
{ "_id" : ObjectId("4c7ed52a01e4ee4667d07d8c"), "a" : "222def222" }

konto usunięte

Temat: Problematyczne wyrażenie regularne

Niestety nie do końca Twoje zapytanie działa:

> db.regexp.find();     
{ "_id" : ObjectId("4c7f403e1a5947f10248bf5e"), "a" : "111abc111" }
{ "_id" : ObjectId("4c7f40441a5947f10248bf5f"), "a" : "222def222" }
{ "_id" : ObjectId("4c7f404a1a5947f10248bf60"), "a" : "222def222ghi" }
{ "_id" : ObjectId("4c7f40511a5947f10248bf61"), "a" : "111abc111ghi" }
{ "_id" : ObjectId("4c7f405a1a5947f10248bf62"), "a" : "ghi111def222" }
{ "_id" : ObjectId("4c7f40681a5947f10248bf63"), "a" : "def222ghi111" }

> db.regexp.find({a: /(xyz)/, a: {$not: /(ghi)/}});
{ "_id" : ObjectId("4c7f403e1a5947f10248bf5e"), "a" : "111abc111" }
{ "_id" : ObjectId("4c7f40441a5947f10248bf5f"), "a" : "222def222" }

konto usunięte

Temat: Problematyczne wyrażenie regularne

Dla potomnych:

> db.regexp.find({a: {$in: [/111/], $not: /ghi/}});
{ "_id" : ObjectId("4c7f403e1a5947f10248bf5e"), "a" : "111abc111" }



Wyślij zaproszenie do