Non è possibile fare riferimento al campo regex memorizzato nel documento nell'operatore regex all'interno dell'espressione di corrispondenza.
Quindi non può essere fatto in mongo side con la struttura attuale.
$lookup
funziona bene con la condizione di uguaglianza. Quindi un'alternativa (simile a quella suggerita da Nic) sarebbe aggiornare la tua raccolta di post per includere un campo aggiuntivo chiamato keywords
(array di valori di parole chiave su cui è possibile cercare) per ogni titolo.
db.users.aggregate([
{$lookup: {
from: "posts",
localField: "userregex",
foreignField: "keywords",
as: "posts"
}
}
])
La query precedente farà qualcosa del genere (funziona da 3.4).
keywords: { $in: [ userregex.elem1, userregex.elem2, ... ] }.
Dai documenti
Sembra che le versioni precedenti ( testate su 3.2 ) corrispondano solo se l'array ha lo stesso ordine, i valori e la lunghezza degli array sono gli stessi.
Esempio di input:
Utenti
db.users.insertMany([
{
"name": "James",
"userregex": [
"another",
"here"
]
},
{
"name": "John",
"userregex": [
"another",
"string"
]
}
])
Messaggi
db.posts.insertMany([
{
"title": "a string here",
"keyword": [
"here"
]
},
{
"title": "another string here",
"keywords": [
"another",
"here"
]
},
{
"title": "one string here",
"keywords": [
"string"
]
}
])
Esempio di output:
[
{
"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"
]
}
]
}
]