Es ist nicht möglich, das im Dokument gespeicherte Regex-Feld im Regex-Operator innerhalb des Übereinstimmungsausdrucks zu referenzieren.
Es kann also nicht auf der Mongo-Seite mit der aktuellen Struktur durchgeführt werden.
$lookup
funktioniert gut mit Gleichheitsbedingung. Eine Alternative ( ähnlich dem Vorschlag von Nic ) wäre also, Ihre Beitragssammlung so zu aktualisieren, dass sie ein zusätzliches Feld namens keywords
enthält (Array von Schlüsselwortwerten, nach denen gesucht werden kann) für jeden Titel.
db.users.aggregate([
{$lookup: {
from: "posts",
localField: "userregex",
foreignField: "keywords",
as: "posts"
}
}
])
Die obige Abfrage macht ungefähr so (funktioniert ab 3.4).
keywords: { $in: [ userregex.elem1, userregex.elem2, ... ] }.
Aus der Dokumentation
Es sieht so aus, als würden frühere Versionen (getestet auf 3.2) nur übereinstimmen, wenn Arrays die gleiche Reihenfolge, Werte und Länge der Arrays haben.
Beispieleingabe:
Benutzer
db.users.insertMany([
{
"name": "James",
"userregex": [
"another",
"here"
]
},
{
"name": "John",
"userregex": [
"another",
"string"
]
}
])
Beiträge
db.posts.insertMany([
{
"title": "a string here",
"keyword": [
"here"
]
},
{
"title": "another string here",
"keywords": [
"another",
"here"
]
},
{
"title": "one string here",
"keywords": [
"string"
]
}
])
Beispielausgabe:
[
{
"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"
]
}
]
}
]