Nie można odwoływać się do pola wyrażenia regularnego przechowywanego w dokumencie w operatorze wyrażenia regularnego w wyrażeniu dopasowania.
Więc nie można tego zrobić po stronie mongo przy obecnej strukturze.
$lookup
działa dobrze z warunkiem równości. Więc jedną alternatywą (podobną do tego, co sugerował Nic) byłaby aktualizacja kolekcji postów, tak aby zawierała dodatkowe pole o nazwie keywords
( tablica wartości słów kluczowych, w których można je przeszukiwać ) dla każdego tytułu.
db.users.aggregate([
{$lookup: {
from: "posts",
localField: "userregex",
foreignField: "keywords",
as: "posts"
}
}
])
Powyższe zapytanie zrobi coś takiego (działa od 3.4).
keywords: { $in: [ userregex.elem1, userregex.elem2, ... ] }.
Z dokumentów
Wygląda na to, że wcześniejsze wersje (testowane na 3.2) będą pasować tylko wtedy, gdy tablica ma tę samą kolejność, wartości i długość tablic jest taka sama.
Przykładowe wejście:
Użytkownicy
db.users.insertMany([
{
"name": "James",
"userregex": [
"another",
"here"
]
},
{
"name": "John",
"userregex": [
"another",
"string"
]
}
])
Posty
db.posts.insertMany([
{
"title": "a string here",
"keyword": [
"here"
]
},
{
"title": "another string here",
"keywords": [
"another",
"here"
]
},
{
"title": "one string here",
"keywords": [
"string"
]
}
])
Przykładowe wyjście:
[
{
"name": "James",
"userregex": [
"another",
"here"
],
"posts": [
{
"title": "another string here",
"keywords": [
"another",
"here"
]
},
{
"title": "a string here",
"keywords": [
"here"
]
}
]
},
{
"name": "John",
"userregex": [
"another",
"string"
],
"posts": [
{
"title": "another string here",
"keywords": [
"another",
"here"
]
},
{
"title": "one string here",
"keywords": [
"string"
]
}
]
}
]