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

मानगो एकत्रीकरण:मूल्यों को समूहों में विभाजित करना

हाँ यह संभव है। एकाधिक दस्तावेज़ों की तुलना करने के लिए आपको का उपयोग करके उन्हें एक सरणी में रखना होगा। $समूह और null passing पास करना _id . के रूप में . फिर मूल्यों की तुलना शुरू करने के लिए आपको लूप की तरह ही एक इंडेक्स की आवश्यकता होती है ताकि आप इसे $रेंज ऑपरेटर।

विभाजन निर्धारित करने के लिए आपको डबल $map की आवश्यकता होगी . पहला 0 . की एक सरणी लौटाएगा और 1 मान जहां 1 इसका मतलब है कि यह तारीख नया विभाजन शुरू करती है।

दूसरा $map विभाजन अनुक्रमणिका के साथ तिथियों को मर्ज करना है। विभाजन सूचकांक प्राप्त करने के लिए आप $sum कर सकते हैं एक सबअरे ($slice ) शून्य और एक के।

उदाहरण के लिए:

db.col.save({ date: ISODate("2019-04-12T21:00:00.000Z") })
db.col.save({ date: ISODate("2019-04-12T21:15:00.000Z") })
db.col.save({ date: ISODate("2019-04-12T21:45:00.000Z") })
db.col.save({ date: ISODate("2019-04-12T23:00:00.000Z") })
db.col.save({ date: ISODate("2019-04-12T20:00:00.000Z") })
db.col.save({ date: ISODate("2019-04-12T18:30:00.000Z") })
db.col.save({ date: ISODate("2019-04-12T20:10:00.000Z") })

20 . के अंतराल के लिए मिनट आप एकत्रीकरण के नीचे चला सकते हैं:

db.col.aggregate([
    { $sort: { date: 1 } },
    { $group: { _id: null, dates: { $push: "$date" } } },
    {
        $addFields: {
            partitions: {
                $map: {
                    input: { $range: [ 0, { $size: "$dates" } ] },
                    as: "index",
                    in: {
                        $let: {
                            vars: {
                                current: { $arrayElemAt: [ "$dates", "$$index" ] },
                                prev: { $arrayElemAt: [ "$dates", { $add: [ "$$index", -1 ] } ] }
                            },
                            in: {
                                $cond: [
                                    { $or: [ { $eq: [ "$$index", 0 ] }, { $lt: [ { $subtract: [ "$$current", "$$prev" ] }, 1200000 ] } ] },
                                    0,
                                    1
                                ]
                            }
                        }
                    }
                }
            }
        }
    },
    {
        $project: {
            datesWithPartitions: {
                $map: {
                    input: { $range: [ 0, { $size: "$dates" } ] },
                    as: "index",
                    in: {
                        date: { $arrayElemAt: [ "$dates", "$$index" ] },
                        partition: { $sum: { $slice: [ "$partitions", { $add: [ "$$index", 1 ] } ] } }
                    }
                }
            }
        }
    }
])

जो प्रिंट होगा:

{
    "_id" : null,
    "datesWithPartitions" : [
        {
            "date" : ISODate("2019-04-12T18:30:00Z"),
            "partition" : 0
        },
        {
            "date" : ISODate("2019-04-12T20:00:00Z"),
            "partition" : 1
        },
        {
            "date" : ISODate("2019-04-12T20:10:00Z"),
            "partition" : 1
        },
        {
            "date" : ISODate("2019-04-12T21:00:00Z"),
            "partition" : 2
        },
        {
            "date" : ISODate("2019-04-12T21:15:00Z"),
            "partition" : 2
        },
        {
            "date" : ISODate("2019-04-12T21:45:00Z"),
            "partition" : 3
        },
        {
            "date" : ISODate("2019-04-12T23:00:00Z"),
            "partition" : 4
        }
    ]
}

MongoDB खेल का मैदान




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. जाँच कर रहा है कि क्या किसी फ़ील्ड में एक स्ट्रिंग है

  2. वर्तमान डेटाबेस को प्रोग्रामेटिक रूप से कैसे प्राप्त करें Mongoid लिख रहा है?

  3. एम्बेड mongodb de.flapdoodle.embed.mongo का उपयोग करके जूनिट परीक्षण मामले

  4. MongoDB नॉर्म क्वेरी नेस्टेड ऑब्जेक्ट्स

  5. Pymongo का उपयोग करके MongoDB में एकल फ़ील्ड का चयन कैसे करें?