Het is niet mogelijk om te verwijzen naar het regex-veld dat is opgeslagen in het document in de regex-operator binnen de match-expressie.
Dus het kan niet worden gedaan in mongo-kant met de huidige structuur.
$lookup
werkt goed met gelijkheidsvoorwaarde. Dus een alternatief (vergelijkbaar met wat Nic suggereerde) zou zijn om je postverzameling bij te werken met een extra veld genaamd keywords
( array van trefwoordwaarden waarop kan worden gezocht ) voor elke titel.
db.users.aggregate([
{$lookup: {
from: "posts",
localField: "userregex",
foreignField: "keywords",
as: "posts"
}
}
])
De bovenstaande query doet iets als dit (werkt vanaf 3.4).
keywords: { $in: [ userregex.elem1, userregex.elem2, ... ] }.
Uit de documenten
Het lijkt erop dat eerdere versies (getest op 3.2) alleen overeenkomen als de array dezelfde volgorde heeft, de waarden en de lengte van de arrays hetzelfde zijn.
Voorbeeldinvoer:
Gebruikers
db.users.insertMany([
{
"name": "James",
"userregex": [
"another",
"here"
]
},
{
"name": "John",
"userregex": [
"another",
"string"
]
}
])
Berichten
db.posts.insertMany([
{
"title": "a string here",
"keyword": [
"here"
]
},
{
"title": "another string here",
"keywords": [
"another",
"here"
]
},
{
"title": "one string here",
"keywords": [
"string"
]
}
])
Voorbeelduitvoer:
[
{
"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"
]
}
]
}
]