MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB $subtract

В 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, "резултат" :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() 

Резултат:

неуловено изключение:Грешка:командата е неуспешна:{ "ok" :0, "errmsg" :"не мога да $subtract adate от двойно", "code" :16556, "codeName" :"Location16556"} :агрегатът е неуспешен:[email protected]/mongo/shell/utils.js:25:[email protected]/mongo/shell/assert.js:18:[email protected]/mongo/shell/assert.js:618:17example@ sqldat.com/mongo/shell/assert.js:708:[email protected]/mongo/shell/db.js:266:[email protected]/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" ] } } 
         }
   ]
) 

Резултат:

неуловено изключение:Грешка:командата е неуспешна:{ "ok" :0, "errmsg" :"Невалиден $project ::причинен от ::Изразът $subtract приема точно 2 аргумента. 1 беше подаден.", "код" :16020, "codeName" :"Location16020"} :неуспешен агрегат :[email protected]/mongo/shell/utils.js:25:[email protected]/mongo/shell/assert.js:18:14example@sqldat .com/mongo/shell/assert.js:618:[email protected]/mongo/shell/assert.js:708:[email protected]/mongo/shell/db.js:266:[email protected] /mongo/shell/collection.js:1046:12@(shell):1:1

Предаване на нулеви стойности

Подаване на две null стойностите води до null се връща.

Пример:

db.data.aggregate(
   [
     { $project: { 
       result: { 
         $subtract: [ null, null ] } } 
         }
   ]
) 

Резултат:

{ "_id" :1, "резултат":нула }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да експортирате всички колекции в MongoDB?

  2. Mongodb актуална корекция KB2731284

  3. Масивите, съхранявани в MongoDB, запазват ли реда си?

  4. Справяне с бавни заявки в MongoDB

  5. MongoDB / Meteor / Експортиране на MONGO_URL към внедрени приложения