एकत्रीकरण क्वेरी का उपयोग करना:
$match
शर्त, नेस्टेड$ememMatch
. डालें 2 स्तर की स्थिति के लिए$reduce
vid सरणी के लूप को पुनरावृत्त करने के लिए, प्रारंभिक [] सेट करें, स्थिति की जांच करें यदि वर्तमान सरणी में स्ट्रिंग है तो वर्तमान सरणी लौटाएं अन्यथा प्रारंभिक मान लौटाएं
let searchString = "adfsdfasfd";
db.collection.aggregate([
{
$match: {
vid: { $elemMatch: { $elemMatch: { $in: [searchString] } } }
}
},
{
$addFields: {
vid: {
$reduce: {
input: "$vid",
initialValue: [],
in: {
$cond: [{ $in: [searchString, "$$this"] }, "$$this", "$$value"]
}
}
}
}
}
])
परिणाम:
[
{
"vid": [
"adfsdfasfd",
"this is some sample text",
"https://example.com"
]
}
]
खोज क्वेरी का उपयोग करना:
- मिलान की स्थिति को ऊपर के समान रखें
- प्रक्षेपण के लिए मैच परिणाम प्राप्त करें लेकिन एक ही नेस्टेड सरणी में
let searchString = "adfsdfasfd";
db.collection.find(
{ vid: { $elemMatch: { $elemMatch: { $in: [searchString] } } } }
).project({ "vid.$": 1, _id: 0 }).toArray()
परिणाम:
[
{
"vid": [
[
"adfsdfasfd",
"this is some sample text",
"https://example.com"
]
]
}
]