JavaScript फ़ंक्शन लिखकर डायनामिक क्वेरी ऑब्जेक्ट बनाएं
MongoDB शेल में आप JavaScript फ़ंक्शन लिखकर रनटाइम पर क्वेरी ऑब्जेक्ट डायनामिक रूप से बना सकते हैं। यह एप्लिकेशन कोड में उपयोगी होता है जहां फ़िल्टर यूज़र इनपुट पर आधारित होते हैं।
उदाहरण: संग्रह बनाना
> db.dynamicQueryDemo.insertOne({"Name": "John", "Subject": ["MongoDB", "MySQL"]});
{ "acknowledged": true, "insertedId": ObjectId("5cef5c5def71edecf6a1f69a") }
> db.dynamicQueryDemo.insertOne({"Name": "John", "Subject": ["C", "C++"]});
{ "acknowledged": true, "insertedId": ObjectId("5cef5c73ef71edecf6a1f69b") }
> db.dynamicQueryDemo.insertOne({"Name": "John", "Subject": ["MongoDB", "Java"]});
{ "acknowledged": true, "insertedId": ObjectId("5cef5c8bef71edecf6a1f69c") }
सभी डॉक्यूमेंट्स देखना
> db.dynamicQueryDemo.find().pretty();
{
"_id": ObjectId("5cef5c5def71edecf6a1f69a"),
"Name": "John",
"Subject": ["MongoDB", "MySQL"]
}
{
"_id": ObjectId("5cef5c73ef71edecf6a1f69b"),
"Name": "John",
"Subject": ["C", "C++"]
}
{
"_id": ObjectId("5cef5c8bef71edecf6a1f69c"),
"Name": "John",
"Subject": ["MongoDB", "Java"]
}
डायनामिक क्वेरी फ़ंक्शन और उपयोग
एक फ़ंक्शन बनाएं जो सब्जेक्ट ऐरे के आधार पर $in या $nin क्वेरी ऑब्जेक्ट लौटाता है:
> function findDocument(subject) {
var find = {};
if (subject.length == 0)
find["$nin"] = subject;
else
find["$in"] = subject;
return find;
}
> var sub = ["MySQL", "MongoDB"];
> var myDoc = findDocument(sub);
> db.dynamicQueryDemo.aggregate([{
$match: {
"Subject": myDoc
}
}]);
आउटपुट:
{
"_id": ObjectId("5cef5c5def71edecf6a1f69a"),
"Name": "John",
"Subject": ["MongoDB", "MySQL"]
}
{
"_id": ObjectId("5cef5c8bef71edecf6a1f69c"),
"Name": "John",
"Subject": ["MongoDB", "Java"]
}
फ़ंक्शन ने {$in: ["MySQL", "MongoDB"]} ऑब्जेक्ट बनाया, और एग्रीगेशन ने उन डॉक्यूमेंट्स को लौटाया जिनके Subject ऐरे में इनमें से कोई भी मान है।
उपयोग: यह पैटर्न एप्लिकेशन कोड (Node.js, Python, आदि) में क्वेरी बिल्डर बनाने के लिए उपयोगी है।