MongoDB में, $millisecond
एकत्रीकरण पाइपलाइन ऑपरेटर दिनांक के मिलीसेकंड भाग को 0
. के बीच पूर्णांक के रूप में लौटाता है और 999
.
आप परिणाम के लिए उपयोग करने के लिए वैकल्पिक रूप से एक समय क्षेत्र निर्दिष्ट कर सकते हैं।
$millisecond
ऑपरेटर या तो एक तिथि स्वीकार करता है (या तो एक तिथि, एक टाइमस्टैम्प, या एक ऑब्जेक्ट आईडी के रूप में), या एक दस्तावेज जो उपयोग करने के लिए दिनांक और समय क्षेत्र निर्दिष्ट करता है।
उदाहरण
मान लीजिए हमारे पास pets
. नामक संग्रह है निम्नलिखित दस्तावेज़ के साथ:
{ "_id" : ObjectId("600631c7c8eb4369cf6ad9c8"), "name" : "Fetch", "born" : ISODate("2020-12-31T23:30:15.123Z") }
हम born
. से मिलीसेकंड भाग निकालने के लिए निम्न कोड चला सकते हैं उस दस्तावेज़ में फ़ील्ड।
db.pets.aggregate(
[
{
$project:
{
_id: 0,
birthMilliSecond: { $millisecond: "$born" }
}
}
]
)
परिणाम:
{ "birthMilliSecond" : 123 }
यहाँ, मैंने birthMilliSecond
. का उपयोग किया है वापस जाने के लिए फ़ील्ड नाम के रूप में, लेकिन यह कुछ भी हो सकता था (जैसे milliSecondsAtBirth
, milliSeconds
, आदि)।
_id
MongoDB में अनुमानों का उपयोग करते समय फ़ील्ड डिफ़ॉल्ट रूप से लौटा दी जाती है, लेकिन इस उदाहरण में मैंने स्पष्ट रूप से _id
छुपाया है _id: 0
. का उपयोग करके फ़ील्ड ।
समयक्षेत्र निर्दिष्ट करें
आप $millisecond
. के आउटपुट के लिए उपयोग करने के लिए एक समय क्षेत्र निर्दिष्ट कर सकते हैं ऑपरेटर।
जब आप ऐसा करते हैं, तो तर्क $millisecond
. तक पहुंच जाता है निम्नलिखित रूप का होना चाहिए:
{ date: <dateExpression>, timezone: <tzExpression> }
जहां <dateExpression>
उपयोग करने की तिथि है, और <tzExpression>
उपयोग करने के लिए समय क्षेत्र है।
ओल्सन टाइमज़ोन पहचानकर्ता (उदा. "Europe/London"
का उपयोग करके समयक्षेत्र निर्दिष्ट किया जा सकता है , "GMT"
) या UTC ऑफ़सेट (उदा. "+02:30"
, "-1030"
)।
ओल्सन टाइमज़ोन आइडेंटिफ़ायर
यहां एक उदाहरण दिया गया है जो मिलीसेकंड को दो अलग-अलग टाइमज़ोन में आउटपुट करता है, प्रत्येक ओल्सन टाइमज़ोन आईडी का उपयोग करता है:
db.pets.aggregate(
[
{
$project: {
_id: 0,
kabul: {
$millisecond: { date: "$born", timezone: "Asia/Kabul" }
},
brisbane: {
$millisecond: { date: "$born", timezone: "Australia/Brisbane" }
}
}
}
]
)
परिणाम:
{ "kabul" : 123, "brisbane" : 123 }
यह देखते हुए कि समय क्षेत्र परिवर्तन मिलीसेकंड भाग को प्रभावित नहीं करता है, परिणाम वही है।
UTC ऑफ़सेट
इस उदाहरण में हम UTC ऑफ़सेट का उपयोग करते हैं।
db.pets.aggregate(
[
{
$project: {
_id: 0,
"utcOffset+04:30": {
$millisecond: { date: "$born", timezone: "+04:30" }
},
"utcOffset+05:45": {
$millisecond: { date: "$born", timezone: "+05:45" }
}
}
}
]
)
परिणाम:
{ "utcOffset+04:30" : 123, "utcOffset+05:45" : 123 }
ऑब्जेक्ट आईडी से मिलीसेकंड लौटाएं
आप $millisecond
. का उपयोग कर सकते हैं ऑब्जेक्ट आईडी से मिलीसेकंड भाग वापस करने के लिए।
ObjectId मान 12 बाइट हेक्साडेसिमल मान होते हैं जिनमें निम्न शामिल होते हैं:
- ऑब्जेक्ट आईडी के निर्माण का प्रतिनिधित्व करने वाला एक 4 बाइट टाइमस्टैम्प मान, यूनिक्स युग के बाद से सेकंड में मापा जाता है।
- 5 बाइट एक यादृच्छिक मान है
- एक 3 बाइट इंक्रीमेंटिंग काउंटर, एक यादृच्छिक मान के लिए आरंभ किया गया।
संक्षेप में, हमारा दस्तावेज़ इस तरह दिखता है:
{ "_id" : ObjectId("600631c7c8eb4369cf6ad9c8"), "name" : "Fetch", "born" : ISODate("2020-12-31T23:30:15.123Z") }
इस दस्तावेज़ में एक ObjectId है। इसलिए हम $millisecond
. का उपयोग कर सकते हैं उस ऑब्जेक्ट आईडी से मिलीसेकंड भाग वापस करने के लिए।
हालांकि, जैसा कि उल्लेख किया गया है, ObjectId का समय क्षेत्र यूनिक्स युग के बाद से केवल सेकंड में मापा जाता है, और इसलिए, इसमें एक मिलीसेकंड भाग शामिल नहीं होता है।
उदाहरण:
db.pets.aggregate(
[
{
$project:
{
"timeStamp": { $toDate: "$_id"},
"millisecond": { $millisecond: "$_id" }
}
}
]
).pretty()
परिणाम:
{ "_id" : ObjectId("600631c7c8eb4369cf6ad9c8"), "timeStamp" : ISODate("2021-01-19T01:11:35Z"), "millisecond" : 0 }
हम देख सकते हैं कि टाइमस्टैम्प में एक मिलीसेकंड भाग शामिल नहीं है, और परिणाम 0
है .
इस मामले में, मैंने $toDate
. का भी इस्तेमाल किया ऑब्जेक्ट आईडी के टाइमस्टैम्प भाग को वापस करने के लिए एकत्रीकरण पाइपलाइन ऑपरेटर।