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

MongoDB:प्रत्येक स्थिति मान परिवर्तन के बीच रहने के समय की गणना करें

जांचें कि क्या यह समाधान आपकी आवश्यकताओं को पूरा करता है।

स्पष्टीकरण

  1. हम एक ही संग्रह में शामिल होते हैं। तो प्रत्येक आइटम के लिए i हम आइटम लेते हैं i+1 . यह विधि हमें presenceStatus . कहां देती है बदल दिया गया है।
  2. हम दस्तावेज़ को फ़िल्टर करते हैंi i+1 जोड़े जहां presenceStatus है 0 - 1 या 1 - 0
  3. हम उन्हें एक data . में समूहित करते हैं सरणी।
  4. अब हम data . पर पुनरावृति करते हैं 2 चरणों से (i=0;i<data.length;i+=2) और updatedAt . लें मूल्य।
    var occupiedTime = data[i].tmp.updatedAt
    var vacantTime   = data[i+1].tmp.updatedAt
  1. हम परिकलित मानों को समतल करते हैं और मूल दस्तावेज़ संरचना को पुनर्स्थापित करते हैं।
db.collection.aggregate([
  {
    $lookup: {
      from: "collection",
      let: {
        root_id: "$_id"
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $gt: [
                "$_id",
                "$$root_id"
              ]
            }
          }
        },
        {
          $limit: 1
        }
      ],
      as: "tmp"
    }
  },
  {
    $match: {
      $or: [
        {
          "presenceStatus": 1,
          "tmp.presenceStatus": 0
        },
        {
          "presenceStatus": 0,
          "tmp.presenceStatus": 1
        }
      ]
    }
  },
  {
    $group: {
      _id: null,
      data: {
        $push: {
          $mergeObjects: [
            "$$ROOT",
            {
              tmp: {
                $arrayElemAt: [
                  "$tmp",
                  0
                ]
              }
            }
          ]
        }
      }
    }
  },
  {
    $addFields: {
      data: {
        $map: {
          input: {
            $range: [
              0,
              {
                $size: "$data"
              },
              2
            ]
          },
          as: "idx",
          in: {
            "occupiedTime": {
              $arrayElemAt: [
                "$data.tmp.updatedAt",
                {
                  $cond: [
                    {
                      $eq: [
                        {
                          $arrayElemAt: [
                            "$data.tmp.presenceStatus",
                            "$$idx"
                          ]
                        },
                        1
                      ]
                    },
                    "$$idx",
                    {
                      $add: [
                        "$$idx",
                        1
                      ]
                    }
                  ]
                }
              ]
            },
            "vacantTime": {
              $arrayElemAt: [
                "$data.tmp.updatedAt",
                {
                  $cond: [
                    {
                      $eq: [
                        {
                          $arrayElemAt: [
                            "$data.tmp.presenceStatus",
                            "$$idx"
                          ]
                        },
                        0
                      ]
                    },
                    "$$idx",
                    {
                      $add: [
                        "$$idx",
                        1
                      ]
                    }
                  ]
                }
              ]
            },
            "created": {
              $arrayElemAt: [
                "$data.tmp.createdAt",
                "$$idx"
              ]
            },
            "_id": {
              $arrayElemAt: [
                "$data.tmp._id",
                "$$idx"
              ]
            },
            "__v": 0
          }
        }
      }
    }
  },
  {
    $unwind: "$data"
  },
  {
    $replaceRoot: {
      newRoot: "$data"
    }
  },
  {
    $addFields: {
      "dwellTime": {
        $dateToString: {
          date: {
            $toDate: {
              $subtract: [
                "$vacantTime",
                "$occupiedTime"
              ]
            }
          },
          format: "%H-%M-%S"
        }
      }
    }
  }
])

मोंगो खेल का मैदान



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. पायमोंगो ट्यूटोरियल:आपके पायथन ऐप में मोंगोडीबी विफलता का परीक्षण

  2. mongoDB उपसर्ग वाइल्डकार्ड:फुलटेक्स्ट-सर्च ($ टेक्स्ट) सर्च-स्ट्रिंग के साथ भाग खोजें

  3. अपने MongoDB सर्वर पर डिस्क स्थान को समझना और प्रबंधित करना

  4. Mongoose और Node.js और अंडरस्कोर के साथ कोड जनरेट करने का आसान तरीका?

  5. MongoDB में लेनदेन समर्थन