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

गुम तारीखों को रिकॉर्ड में भरें

डिफ़ॉल्ट मान वापस करने के लिए आपको कुछ अतिरिक्त चरणों की आवश्यकता है। सबसे पहले आपको $group . का उपयोग करना होगा _id . के साथ null पर सेट करें एक दस्तावेज़ में सभी परिणाम एकत्र करने के लिए। फिर आप इनपुट के रूप में दिनों की एक सरणी के साथ $map का उपयोग कर सकते हैं। उसके अंदर $map आप $indexOfArray का उपयोग यह पता लगाने के लिए कर सकते हैं कि क्या वह तिथि आपके वर्तमान परिणाम सेट में मौजूद है। यदि हाँ (index != -1 ) तो आप उस मान को वापस कर सकते हैं, अन्यथा आपको डिफ़ॉल्ट उप-दस्तावेज़ को views . के साथ वापस करने की आवश्यकता है 0 . पर सेट करें . फिर आप दस्तावेज़ों की सूची वापस पाने के लिए $unwind और नेस्टेड stats को बढ़ावा देने के लिए $replaceRoot का उपयोग कर सकते हैं एक शीर्ष स्तर तक।

ProductView.aggregate([
    { $match: { productId: '5b8c0f3204a10228b00a1745' } },
    { $project: { day: { $substr: ["$createdAt", 0, 10] } } },
    {
        $group: {
            _id: "$day",
            count: { $sum: 1 },
            time: { $avg: "$createdAt" },
        }
    },
    { $sort: { _id: 1 } },
    {
        $project: {
            date: '$_id',
            views: '$count',
        },
    },
    {
        $group: {
            _id: null,
            stats: { $push: "$$ROOT" }
        }
    },
    {
        $project: {
            stats: {
                $map: {
                    input: [ "2018-09-01", "2018-09-02", "2018-09-03", "2018-09-04", "2018-09-05" ],
                    as: "date",
                    in: {
                        $let: {
                            vars: { dateIndex: { "$indexOfArray": [ "$stats._id", "$$date" ] } },
                            in: { 
                                $cond: {
                                    if: { $ne: [ "$$dateIndex", -1 ] },
                                    then: { $arrayElemAt: [ "$stats", "$$dateIndex" ] },
                                    else: { _id: "$$date", date: "$$date", views: 0 }
                                } 
                            }
                        }
                    }
                }
            }
        }
    },
    {
        $unwind: "$stats"
    },
    {
        $replaceRoot: {
            newRoot: "$stats"
        }
    }
]).exec((err, result) => ...)

आप साधारण लूप का उपयोग करके अपने एप्लिकेशन लॉजिक में तिथियों की एक स्थिर सूची तैयार कर सकते हैं। मेरा मानना ​​​​है कि यह मोंगोडीबी में भी संभव है ($ रेंज का उपयोग करके) लेकिन यह इस एकत्रीकरण पाइपलाइन को जटिल बना सकता है। मुझे बताएं कि क्या आप इसके साथ ठीक हैं या आप MongoDB में तिथियों की उस सरणी को उत्पन्न करने का प्रयास करना चाहते हैं।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongoimport का उपयोग करके 1 से अधिक json फ़ाइल आयात करें

  2. मैं मोंगोडब के साथ अनुच्छेदों को कैसे स्टोर/प्रदर्शित करूं?

  3. नेस्टेड सरणियों को अद्यतन करने के लिए स्थितीय `$` ऑपरेटर का एकाधिक उपयोग

  4. रेल 3:एक ही समय में सक्रिय रिकॉर्ड और मोंगोइड का उपयोग कैसे करें

  5. मोंगोडब में बाल वस्तुओं से कैसे पूछें?