No es posible hacer referencia al campo de expresión regular almacenado en el documento en el operador de expresión regular dentro de la expresión de coincidencia.
Por lo tanto, no se puede hacer en el lado de mongo con la estructura actual.
$lookup
funciona bien con condiciones de igualdad. Entonces, una alternativa (similar a lo que sugirió Nic) sería actualizar su colección de publicaciones para incluir un campo adicional llamado keywords
(matriz de valores de palabras clave en las que se puede buscar) para cada título.
db.users.aggregate([
{$lookup: {
from: "posts",
localField: "userregex",
foreignField: "keywords",
as: "posts"
}
}
])
La consulta anterior hará algo como esto (funciona desde 3.4).
keywords: { $in: [ userregex.elem1, userregex.elem2, ... ] }.
De los documentos
Parece que las versiones anteriores (probadas en 3.2) solo coincidirán si la matriz tiene el mismo orden, los valores y la longitud de las matrices es la misma.
Entrada de muestra:
Usuarios
db.users.insertMany([
{
"name": "James",
"userregex": [
"another",
"here"
]
},
{
"name": "John",
"userregex": [
"another",
"string"
]
}
])
Publicaciones
db.posts.insertMany([
{
"title": "a string here",
"keyword": [
"here"
]
},
{
"title": "another string here",
"keywords": [
"another",
"here"
]
},
{
"title": "one string here",
"keywords": [
"string"
]
}
])
Salida de muestra:
[
{
"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"
]
}
]
}
]