MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

नक्शा पिछली पंक्ति के साथ सहसंबंधित करने की आवश्यकता के साथ क्वेरी के प्रकार को कम करें

यदि आप इसे रिलेशनल डेटाबेस में कर रहे थे, तो आप पंक्ति दर पंक्ति की तुलना नहीं कर रहे होंगे, इसके बजाय आप बार-बार विज़िट खोजने के लिए एकत्रीकरण क्वेरी का उपयोग करेंगे (सेलेक्ट ... ग्रुप बाय का उपयोग करके) ताकि आपको इसे मोंगोडीबी में उसी तरह करना चाहिए।

सबसे पहले आपको प्रति ग्राहक प्रति स्टोर प्रति दिन विज़िट एकत्रित करने की आवश्यकता है:

group1 = { "$group" : {
        "_id" : {
            "c" : "$clientId",
            "l" : "$location",
            "day" : {
                "y" : {
                    "$year" : "$tov"
                },
                "m" : {
                    "$month" : "$tov"
                },
                "d" : {
                    "$dayOfMonth" : "$tov"
                }
            }
        },
        "visits" : {
            "$sum" : 1
        }
    }
};

संपादित करें चूंकि आप केवल अगले DAYS को दोहराना चाहते हैं, इसलिए आप ग्राहक द्वारा, स्टोर द्वारा समूहित करेंगे और गिनेंगे कि उस ग्राहक द्वारा उस स्टोर पर आने के लिए कितने अलग-अलग DAYS थे:

group2 = {"$group" : 
    {"_id" : {
        "c" : "$_id.c",
        "s" : "$_id.l"
    },
    "totalDays" : {
        "$sum" : 1
    }
} };

तब आप केवल ऊपर से रिकॉर्ड शामिल करना चाहते हैं जहां एक ही ग्राहक द्वारा एक ही स्टोर में एक से अधिक दिनों में एक से अधिक विज़िट हुई थीं:

match = { "$match" : { "totalDays" : { "$gt" : 1 } } };

यहां एक नमूना डेटा सेट और उपरोक्त पाइपलाइन संचालन का उपयोग करके इस एकत्रीकरण का परिणाम दिया गया है:

> db.visits.find({},{_id:0,purchases:0}).sort({location:1, clientId:1, tov:1})
{ "clientId" : 1, "location" : "l1", "tov" : ISODate("2013-01-01T20:00:00Z") }
{ "clientId" : 1, "location" : "l1", "tov" : ISODate("2013-01-01T21:00:00Z") }
{ "clientId" : 1, "location" : "l1", "tov" : ISODate("2013-01-03T20:00:00Z") }
{ "clientId" : 2, "location" : "l1", "tov" : ISODate("2013-01-01T21:00:00Z") }
{ "clientId" : 3, "location" : "l1", "tov" : ISODate("2013-01-01T21:00:00Z") }
{ "clientId" : 3, "location" : "l1", "tov" : ISODate("2013-01-02T21:00:00Z") }
{ "clientId" : 1, "location" : "l2", "tov" : ISODate("2013-01-01T23:00:00Z") }
{ "clientId" : 3, "location" : "l2", "tov" : ISODate("2013-01-02T21:00:00Z") }
{ "clientId" : 3, "location" : "l2", "tov" : ISODate("2013-01-02T21:00:00Z") }
{ "clientId" : 1, "location" : "l3", "tov" : ISODate("2013-01-03T20:00:00Z") }
{ "clientId" : 2, "location" : "l3", "tov" : ISODate("2013-01-04T20:00:00Z") }
{ "clientId" : 4, "location" : "l3", "tov" : ISODate("2013-01-04T20:00:00Z") }
{ "clientId" : 4, "location" : "l3", "tov" : ISODate("2013-01-04T21:00:00Z") }
{ "clientId" : 4, "location" : "l3", "tov" : ISODate("2013-01-04T22:00:00Z") }

> db.visits.aggregate(group1, group2, match)
{
    "result" : [
    {
        "_id" : {
            "c" : 3,
            "s" : "l1"
        },
        "totalDays" : 2
    },
    {
        "_id" : {
            "c" : 1,
            "s" : "l1"
        },
        "totalDays" : 2
    }
    ],
    "ok" : 1
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb विफल:डीबी सर्वर से कनेक्ट करने में त्रुटि:कोई पहुंच योग्य सर्वर नहीं

  2. mongodb एक मूल्य से संपूर्ण दस्तावेज़ प्राप्त करें

  3. MongoDB कनेक्शन के लिए .NET सर्वोत्तम अभ्यास?

  4. MongoDb एकत्रीकरण:सरणी -1 और सरणी -2 दिए जाने पर मैं किसी अन्य सरणी -2 के आधार पर सरणी -1 को कैसे समूहित कर सकता हूं?

  5. MongoDB 2dsphere अनुक्रमणिका विफल (विकृत ज्यामिति?)