Det är inte möjligt att referera till det regex-fält som är lagrat i dokumentet i regex-operatorn inuti match expression.
Så det kan inte göras på mongosidan med nuvarande struktur.
$lookup
fungerar bra med jämställdhetsvillkor. Så ett alternativ (liknande vad Nic föreslog) skulle vara att uppdatera din inläggssamling för att inkludera ett extra fält som heter keywords
( en rad nyckelordsvärden det kan sökas på ) för varje titel.
db.users.aggregate([
{$lookup: {
from: "posts",
localField: "userregex",
foreignField: "keywords",
as: "posts"
}
}
])
Ovanstående fråga kommer att göra ungefär så här (fungerar från 3.4).
keywords: { $in: [ userregex.elem1, userregex.elem2, ... ] }.
Från dokumenten
Det verkar som att tidigare versioner (testade på 3.2) bara kommer att matcha om arrayen har samma ordning, värden och längden på arrayer är samma.
Exempelinmatning:
Användare
db.users.insertMany([
{
"name": "James",
"userregex": [
"another",
"here"
]
},
{
"name": "John",
"userregex": [
"another",
"string"
]
}
])
Inlägg
db.posts.insertMany([
{
"title": "a string here",
"keyword": [
"here"
]
},
{
"title": "another string here",
"keywords": [
"another",
"here"
]
},
{
"title": "one string here",
"keywords": [
"string"
]
}
])
Exempelutgång:
[
{
"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"
]
}
]
}
]