मैच एक्सप्रेशन के अंदर रेगेक्स ऑपरेटर में दस्तावेज़ में संग्रहीत रेगेक्स फ़ील्ड को संदर्भित करना संभव नहीं है।
तो यह वर्तमान संरचना के साथ मोंगो पक्ष में नहीं किया जा सकता है।
$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"
]
}
]
}
]