Není možné odkazovat na pole regulárního výrazu uložené v dokumentu v operátoru regulárního výrazu ve výrazu shody.
Takže to nelze udělat na mongo straně se současnou strukturou.
$lookup
funguje dobře s podmínkou rovnosti. Takže jednou alternativou (podobnou tomu, co navrhl Nic ) by byla aktualizace vaší sbírky příspěvků tak, aby zahrnovala další pole nazvané keywords
( pole hodnot klíčových slov, podle kterých lze vyhledávat ) pro každý titul.
db.users.aggregate([
{$lookup: {
from: "posts",
localField: "userregex",
foreignField: "keywords",
as: "posts"
}
}
])
Výše uvedený dotaz udělá něco takového (funguje od 3.4).
keywords: { $in: [ userregex.elem1, userregex.elem2, ... ] }.
Z dokumentů
Vypadá to, že starší verze (testované na 3.2) se budou shodovat pouze v případě, že pole má stejné pořadí, hodnoty a délku polí.
Ukázkový vstup:
Uživatelé
db.users.insertMany([
{
"name": "James",
"userregex": [
"another",
"here"
]
},
{
"name": "John",
"userregex": [
"another",
"string"
]
}
])
Příspěvky
db.posts.insertMany([
{
"title": "a string here",
"keyword": [
"here"
]
},
{
"title": "another string here",
"keywords": [
"another",
"here"
]
},
{
"title": "one string here",
"keywords": [
"string"
]
}
])
Ukázkový výstup:
[
{
"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"
]
}
]
}
]