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

मोंगो में गुम तिथियों सहित GroupBy एकत्रीकरण

हो सकता है कि बलो वही हो जो आप चाहते हैं।

1) काउंटर के साथ एक संग्रह बनाएं उदाहरण के लिए यहां 10 दिनों के लिए 1-10

  [
  {
    "date": 0
  },
  {
    "date": 1
  },
  {
    "date": 2
  },
  {
    "date": 3
  },
  {
    "date": 4
  },
  {
    "date": 5
  },
  {
    "date": 6
  },
  {
    "date": 7
  },
  {
    "date": 8
  },
  {
    "date": 9
  }
  ]
  1. इस संग्रह को अपडेट करें और डेटा बनाएं, $add का उपयोग करके 10 तिथियां यहां हम दिनांक "2021-08-01T00:00:00+00:00" से प्रारंभ करते हैं और हम दिनांक "2021-08-10T00:00:00" को समाप्त करेंगे +00:00"

यह अपडेट यह करेगा (क्यू =फिल्टर, यू =अपडेट, यहां इसकी पाइपलाइन अपडेट)

{
  "update": "dates",
  "updates": [
    {
      "q": {},
      "u": [
        {
          "$addFields": {
            "date": {
              "$add": [
                "2021-08-01T00:00:00Z",
                {
                  "$multiply": [
                    "$date",
                    24,
                    60,
                    60000
                  ]
                }
              ]
            }
          }
        }
      ],
      "multi": true
    }
  ]
}

में परिणाम (10 तिथियां, 1 दिन का अंतर)

{
  "_id": {
    "$oid": "610c4bf99ccb15d9c9d67b55"
  },
  "date": {
    "$date": "2021-08-01T00:00:00Z"
  }
},{
  "_id": {
    "$oid": "610c4bf99ccb15d9c9d67b56"
  },
  "date": {
    "$date": "2021-08-02T00:00:00Z"
  }
},{
  "_id": {
    "$oid": "610c4bf99ccb15d9c9d67b57"
  },
  "date": {
    "$date": "2021-08-03T00:00:00Z"
  }
}
...

3) अब हमारे पास 10 तारीखों के साथ तारीखों का संग्रह है, सभी 1 दिन के अंतर के साथ हम ऑर्डर संग्रह के साथ $लुकअप करेंगे

आदेश संग्रह

[
  {
    "_id": 1,
    "date": "2021-08-01T00:00:00Z"
  },
  {
    "_id": 2,
    "date": "2021-08-01T00:00:00Z"
  },
  {
    "_id": 3,
    "date": "2021-08-05T00:00:00Z"
  },
  {
    "_id": 4,
    "date": "2021-08-03T00:00:00Z"
  }
]

क्वेरी (पाइपलाइन लें, पहले वांछित तिथियों को फ़िल्टर करें, और फिर उसी दिन ऑर्डर करने पर ही शामिल हों)

{
  "aggregate": "dates",
  "pipeline": [
    {
      "$match": {
        "$expr": {
          "$and": [
            {
              "$gte": [
                "$date",
                {
                  "$dateFromString": {
                    "dateString": "2021-08-01T00:00:00"
                  }
                }
              ]
            },
            {
              "$lte": [
                "$date",
                {
                  "$dateFromString": {
                    "dateString": "2021-08-05T00:00:00"
                  }
                }
              ]
            }
          ]
        }
      }
    },
    {
      "$lookup": {
        "from": "orders",
        "let": {
          "datesDate": "$date"
        },
        "pipeline": [
          {
            "$match": {
              "$expr": {
                "$eq": [
                  {
                    "$dateToString": {
                      "format": "%Y-%m-%d",
                      "date": "$$datesDate"
                    }
                  },
                  {
                    "$dateToString": {
                      "format": "%Y-%m-%d",
                      "date": "$date"
                    }
                  }
                ]
              }
            }
          }
        ],
        "as": "found-orders"
      }
    },
    {
      "$project": {
        "_id": 0
      }
    }
  ],
  "cursor": {},
  "maxTimeMS": 1200000
}

परिणाम

[
  {
    "date": "2021-08-01T00:00:00Z",
    "found-orders": [
      {
        "_id": 1,
        "date": "2021-08-01T00:00:00Z"
      },
      {
        "_id": 2,
        "date": "2021-08-01T00:00:00Z"
      }
    ]
  },
  {
    "date": "2021-08-02T00:00:00Z",
    "found-orders": []
  },
  {
    "date": "2021-08-03T00:00:00Z",
    "found-orders": [
      {
        "_id": 4,
        "date": "2021-08-03T00:00:00Z"
      }
    ]
  },
  {
    "date": "2021-08-04T00:00:00Z",
    "found-orders": []
  },
  {
    "date": "2021-08-05T00:00:00Z",
    "found-orders": [
      {
        "_id": 3,
        "date": "2021-08-05T00:00:00Z"
      }
    ]
  }
]

यह प्रत्येक तिथि (प्रत्येक दिन के लिए) के लिए, उस दिन किए गए आदेशों को देता है। यदि एक तारीख को कोई आदेश नहीं दिया गया तो सरणी खाली है। यहां केवल 10 दिन हैं, आप अपनी आवश्यकताओं के आधार पर 5 साल की तारीख का संग्रह कर सकते हैं।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. जांच कर रहा है कि मोंगोडब में कोई इंडेक्स मौजूद है या नहीं

  2. कठपुतली का उपयोग करके MongoDB परिनियोजन और रखरखाव के लिए एक गाइड:भाग 2

  3. मोंगोडीबी कर्सर (आउटऑफमेमरी) में मेमोरी लीक?

  4. रिमोट मशीन से पाइमोंगो कनेक्शन टाइमआउट

  5. MongoDB में एकाधिक संग्रह खोजें