Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MongoDB

MongoDB में एग्रीगेशन फिल्टर में दो फील्ड्स की तुलना कैसे करें?

MongoDB एग्रीगेशन में $filter के साथ दो फील्ड्स की तुलना

इसके लिए aggregate() के साथ $filter का उपयोग करें।

कलेक्शन बनाना

> db.demo137.insertOne(
    {
        Name1: "Chris",
        Name2: "David",
        Detail1: [
            { _id: "John", Name3: "Chris" },
            { _id: "Chris", Name3: "Chris" }
        ],
        Detail2: [
            { _id: "David", Name3: "Chris" },
            { _id": "Carol", Name3: "Chris" },
            { _id": "John", Name3: "Chris" }
        ]
    }
);
{ "acknowledged": true, "insertedId": ObjectId("5e31b4cefdf09dd6d08539a0") }

सभी डॉक्यूमेंट्स

> db.demo137.find();
{ "_id": ObjectId("5e31b4cefdf09dd6d08539a0"), "Name1": "Chris", "Name2": "David", "Detail1": [ { "_id": "John", "Name3": "Chris" }, { "_id": "Chris", "Name3": "Chris" } ], "Detail2": [ { "_id": "David", "Name3": "Chris" }, { "_id": "Carol", "Name3": "Chris" }, { "_id": "John", "Name3": "Chris" } ] }

एग्रीगेशन फिल्टर क्वेरी

> db.demo137.aggregate([
    {
        $project: {
            _id: 0,
            Name1: 1,
            Name2: 1,
            Detail1: {
                $filter: {
                    input: "$Detail1",
                    as: "out",
                    cond: { $eq: ["$$out._id", "$Name1"] }
                }
            },
            Detail2: {
                $filter: {
                    input: "$Detail2",
                    as: "out",
                    cond: { $eq: ["$$out._id", "$Name2"] }
                }
            }
        }
    }
])

परिणाम

{ "Name1": "Chris", "Name2": "David", "Detail1": [ { "_id": "Chris", "Name3": "Chris" } ], "Detail2": [ { "_id": "David", "Name3": "Chris" } ] }

व्याख्या

  • $project: आउटपुट आकार परिभाषित करता है
  • $filter: ऐरे से तत्वों को फ़िल्टर करता है
    • input: फ़िल्टर करने वाला ऐरे
    • as: प्रत्येक तत्व के लिए वेरिएबल नाम (यहां "out")
    • cond: शर्त - $$out._id (वर्तमान तत्व का _id) की तुलना टॉप-लेवल फील्ड ($Name1 या $Name2) से करता है
  • Detail1: केवल वही तत्व रखता है जहां _id == Name1 ("Chris")
  • Detail2: केवल वही तत्व रखता है जहां _id == Name2 ("David")

महत्वपूर्ण

$filter में बाहरी फील्ड्स तक पहुँचने के लिए $ (डॉलर) प्रीफिक्स का उपयोग करें ($Name1), और वेरिएबल के लिए $$ (डबल डॉलर) का उपयोग करें ($$out._id)।

  1. - MongoDB में सरणी फील्ड के साथ काम करके सभी से मिलान कैसे करें?

    MongoDB में सभी से मिलान करने के लिए $all का उपयोग करें। $all ऑपरेटर उन डॉक्यूमेंट्स को चुनता है जहां फील्ड का मान एक सरणी है जिसमें सभी निर्दिष्ट तत्व होते हैं। आइए एक कलेक्शन बनाते हैं: > db.demo695.insertOne({ListOfValues:[100,200,500,800]}); { acknowledged : true, insertedId : ObjectId(5ea6d

  1. - MongoDB एग्रीगेशन: सबसे कम मार्क्स वाले दो दस्तावेज प्राप्त करें

    मार्क्स की सॉर्ट की गई सूची प्राप्त करने के लिए $sort का उपयोग करें। केवल दो दस्तावेज प्रदर्शित करने के लिए जिनमें सबसे कम मार्क्स हैं, $limit: 2 का उपयोग करें। आइए दस्तावेजों के साथ एक कलेक्शन बनाते हैं: > db.demo709.insertOne({Name:John,Marks:75}); { acknowledged : true, insertedId : ObjectId(

  1. - MongoDB एग्रीगेशन में मल्टीपल फ़ील्ड्स द्वारा काउंट करना

    एक ही पाइपलाइन में कई फ़ील्ड्स पर काउंट करने के लिए $facet का उपयोग करें। डेमो डेटा db.demo721.insertOne({ details1: { id:101 }, details2: { id:101 }, details3: { id:101 } }); db.demo721.insertOne({ details1: { id:101 }, details2: { id:102 }, details3: { id:102 } }); क्वेरी