MongoDB में, आप $subtract . का उपयोग कर सकते हैं एकत्रीकरण पाइपलाइन ऑपरेटर संख्याओं और/या तिथियों को घटाने के लिए।
विशेष रूप से, $subtract निम्नलिखित तीन काम कर सकते हैं:
- अंतर वापस करने के लिए दो नंबर घटाएं
- किसी तिथि से एक संख्या घटाएं (मिलीसेकंड में) और परिणामी तिथि लौटाएं
- मिलीसेकंड में अंतर वापस करने के लिए दो तिथियों को घटाएं
$subtract ऑपरेटर मानों को तर्क के रूप में स्वीकार करता है। तर्क किसी भी मान्य अभिव्यक्ति हो सकते हैं जब तक कि वे संख्याओं और/या तिथियों को हल करते हैं। किसी तारीख से किसी संख्या को घटाने के लिए, तारीख पहला तर्क होना चाहिए..
नमूना डेटा
मान लीजिए हमारे पास data . नामक संग्रह है निम्नलिखित दस्तावेज़ के साथ:
{
"_id" : 1,
"a" : 20000,
"b" : 250,
"start" : ISODate("2021-01-03T00:00:00Z"),
"end" : ISODate("2021-01-03T23:30:15.100Z")
} संख्या घटाएं
हम $subtract . का उपयोग कर सकते हैं a . घटाने के लिए ऑपरेटर b . से फ़ील्ड क्षेत्र (या इसके विपरीत)।
उदाहरण:
db.data.aggregate(
[
{ $project: {
_id: 0,
a: 1,
b: 1,
result: {
$subtract: [ "$a", "$b" ] } }
}
]
) परिणाम:
{ "a" : 20000, "b" : 250, "result" : 19750 } किसी तारीख से कोई संख्या घटाएं
यदि पहला तर्क एक तिथि है और दूसरा तर्क एक संख्या है, तो $subtract ऑपरेटर तारीख से मिलीसेकंड में संख्या घटाता है।
उदाहरण:
db.data.aggregate(
[
{ $project: {
_id: 0,
b: 1,
start: 1,
result: {
$subtract: [ "$start", "$b" ] } }
}
]
).pretty() परिणाम:
{
"b" : 250,
"start" : ISODate("2021-01-03T00:00:00Z"),
"result" : ISODate("2021-01-02T23:59:59.750Z")
} हम देख सकते हैं कि 250 मिलीसेकंड को तारीख से घटा दिया गया है।
जब हम किसी तिथि से किसी संख्या को घटाते हैं, तो तारीख को पहला तर्क होना चाहिए और संख्या दूसरे तर्क के रूप में होनी चाहिए।
अगर हम तर्कों को इधर-उधर कर देते हैं तो क्या होता है:
db.data.aggregate(
[
{ $project: {
_id: 0,
b: 1,
start: 1,
result: {
$subtract: [ "$b", "$start" ] } }
}
]
).pretty() परिणाम:
uncaught exception: Error: command failed: {
"ok" : 0,
"errmsg" : "cant $subtract adate from a double",
"code" : 16556,
"codeName" : "Location16556"
} : aggregate failed :
example@sqldat.com/mongo/shell/utils.js:25:13
example@sqldat.com/mongo/shell/assert.js:18:14
example@sqldat.com/mongo/shell/assert.js:618:17
example@sqldat.com/mongo/shell/assert.js:708:16
example@sqldat.com/mongo/shell/db.js:266:5
example@sqldat.com/mongo/shell/collection.js:1046:12
@(shell):1:1 हमें यह बताते हुए एक त्रुटि मिलती है कि यह किसी तिथि को दोगुने से नहीं घटा सकता।
दो तिथियों के बीच का अंतर लौटाएं
यदि दोनों तर्क दिनांक हैं, तो $subtract ऑपरेटर दो तिथियों के बीच के अंतर को मिलीसेकंड में लौटाता है।
उदाहरण:
db.data.aggregate(
[
{ $project: {
_id: 0,
start: 1,
end: 1,
result: {
$subtract: [ "$end", "$start" ] } }
}
]
).pretty() परिणाम:
{
"start" : ISODate("2021-01-03T00:00:00Z"),
"end" : ISODate("2021-01-03T23:30:15.100Z"),
"result" : NumberLong(84615100)
} यदि हम तारीखों को बदल देते हैं, तो परिणाम एक ऋणात्मक मान बन जाता है:
db.data.aggregate(
[
{ $project: {
_id: 0,
start: 1,
end: 1,
result: {
$subtract: [ "$start", "$end" ] } }
}
]
).pretty() परिणाम:
{
"start" : ISODate("2021-01-03T00:00:00Z"),
"end" : ISODate("2021-01-03T23:30:15.100Z"),
"result" : NumberLong(-84615100)
} तर्कों की गलत संख्या पास करना
$subtract ऑपरेटर ठीक दो तर्क स्वीकार करता है। तर्कों की गलत संख्या पास करने से त्रुटि होती है।
उदाहरण:
db.data.aggregate(
[
{ $project: {
result: {
$subtract: [ "$a" ] } }
}
]
) परिणाम:
uncaught exception: Error: command failed: {
"ok" : 0,
"errmsg" : "Invalid $project :: caused by :: Expression $subtract takes exactly 2 arguments. 1 were passed in.",
"code" : 16020,
"codeName" : "Location16020"
} : aggregate failed :
example@sqldat.com/mongo/shell/utils.js:25:13
example@sqldat.com/mongo/shell/assert.js:18:14
example@sqldat.com/mongo/shell/assert.js:618:17
example@sqldat.com/mongo/shell/assert.js:708:16
example@sqldat.com/mongo/shell/db.js:266:5
example@sqldat.com/mongo/shell/collection.js:1046:12
@(shell):1:1 शून्य मान पास करना
दो पासिंग null मानों का परिणाम null होता है लौटाया जा रहा है।
उदाहरण:
db.data.aggregate(
[
{ $project: {
result: {
$subtract: [ null, null ] } }
}
]
) परिणाम:
{ "_id" : 1, "result" : null }