Не е възможно да се направи препратка към полето за регулярен израз, съхранено в документа в оператора за регулярен израз в израза за съвпадение.
Така че не може да се направи в mongo страна с текущата структура.
$lookup
работи добре с условие за равенство. Така че една алтернатива (подобна на предложената от Ник) би била да актуализирате колекцията си от публикации, за да включите допълнително поле, наречено keywords
(масив от стойности на ключови думи, по които може да се търси) за всяко заглавие.
db.users.aggregate([
{$lookup: {
from: "posts",
localField: "userregex",
foreignField: "keywords",
as: "posts"
}
}
])
Горната заявка ще направи нещо подобно (работи от 3.4).
keywords: { $in: [ userregex.elem1, userregex.elem2, ... ] }.
От документите
Изглежда, че по-ранните версии (тествани на 3.2) ще съвпадат само ако масивът има същия ред, стойностите и дължината на масивите са еднакви.
Примерен вход:
Потребители
db.users.insertMany([
{
"name": "James",
"userregex": [
"another",
"here"
]
},
{
"name": "John",
"userregex": [
"another",
"string"
]
}
])
Публикации
db.posts.insertMany([
{
"title": "a string here",
"keyword": [
"here"
]
},
{
"title": "another string here",
"keywords": [
"another",
"here"
]
},
{
"title": "one string here",
"keywords": [
"string"
]
}
])
Примерен резултат:
[
{
"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"
]
}
]
}
]