Il n'est pas possible de référencer le champ regex stocké dans le document dans l'opérateur regex à l'intérieur de l'expression de correspondance.
Donc, cela ne peut pas être fait du côté mongo avec la structure actuelle.
$lookup
fonctionne bien avec la condition d'égalité. Donc, une alternative (similaire à ce que Nic a suggéré) serait de mettre à jour votre collection de messages pour inclure un champ supplémentaire appelé keywords
(tableau de valeurs de mots-clés sur lesquels il peut être recherché) pour chaque titre.
db.users.aggregate([
{$lookup: {
from: "posts",
localField: "userregex",
foreignField: "keywords",
as: "posts"
}
}
])
La requête ci-dessus fera quelque chose comme ça (fonctionne à partir de 3.4).
keywords: { $in: [ userregex.elem1, userregex.elem2, ... ] }.
À partir de la documentation
Il semble que les versions antérieures (testées sur 3.2) ne correspondent que si les tableaux ont le même ordre, les valeurs et la longueur des tableaux sont les mêmes.
Exemple d'entrée :
Utilisateurs
db.users.insertMany([
{
"name": "James",
"userregex": [
"another",
"here"
]
},
{
"name": "John",
"userregex": [
"another",
"string"
]
}
])
Messages
db.posts.insertMany([
{
"title": "a string here",
"keyword": [
"here"
]
},
{
"title": "another string here",
"keywords": [
"another",
"here"
]
},
{
"title": "one string here",
"keywords": [
"string"
]
}
])
Exemple de sortie :
[
{
"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"
]
}
]
}
]