sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB $ odečíst

V MongoDB můžete použít $subtract operátor agregačního potrubí pro odečítání čísel a/nebo dat.

Konkrétně $subtract může dělat následující tři věci:

  • Odečtením dvou čísel vrátíte rozdíl
  • Odečtěte číslo (v milisekundách) od data a vraťte výsledné datum
  • Odečtením dvou dat vrátíte rozdíl v milisekundách

$subtract operátor přijímá hodnoty jako argumenty. Argumenty mohou být libovolné platné výrazy, pokud se rozlišují na čísla a/nebo data. Chcete-li odečíst číslo od data, datum musí být prvním argumentem..

Ukázková data

Předpokládejme, že máme kolekci nazvanou data s následujícím dokumentem:

{ "_id" :1, "a" :20000, "b" :250, "start" :ISODate("2021-01-03T00:00:00Z"), "end" :ISODate("2021- 01-03T23:30:15.100Z")}

Odečíst čísla

Můžeme použít $subtract operátor pro odečtení a pole z b pole (nebo naopak).

Příklad:

db.data.aggregate(
   [
     { $project: { 
       _id: 0,
       a: 1, 
       b: 1, 
       result: { 
         $subtract: [ "$a", "$b" ] } } 
         }
   ]
) 

Výsledek:

{ "a" :20000, "b" :250, "výsledek" :19750 }

Odečtěte číslo od data

Pokud je prvním argumentem datum a druhým argumentem je číslo, $subtract operátor odečte číslo od data v milisekundách.

Příklad:

db.data.aggregate(
   [
     { $project: { 
       _id: 0,
       b: 1, 
       start: 1, 
       result: { 
         $subtract: [ "$start", "$b" ] } } 
         }
   ]
).pretty() 

Výsledek:

{ "b" :250, "start" :ISODate("2021-01-03T00:00:00Z"), "výsledek" :ISODate("2021-01-02T23:59:59.750Z")} 

Vidíme, že od data bylo odečteno 250 milisekund.

Když odečteme číslo od data, datum musí být prvním argumentem s číslem jako druhým argumentem.

Zde je to, co se stane, když přehodíme argumenty:

db.data.aggregate(
   [
     { $project: { 
       _id: 0,
       b: 1, 
       start: 1, 
       result: { 
         $subtract: [ "$b", "$start" ] } } 
         }
   ]
).pretty() 

Výsledek:

nezachycená výjimka:Chyba:příkaz se nezdařil:{ "ok" :0, "errmsg" :"nelze $subtract adate from a double", "code" :16556, "codeName" :"Location16556"} :agregace se nezdařila:[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

Dostaneme chybu, která nám říká, že nelze odečíst datum od dvojnásobku.

Vraťte rozdíl mezi dvěma daty

Pokud jsou oba argumenty data, pak $subtract operátor vrátí rozdíl mezi dvěma daty v milisekundách.

Příklad:

db.data.aggregate(
   [
     { $project: { 
       _id: 0,
       start: 1, 
       end: 1,
       result: { 
         $subtract: [ "$end", "$start" ] } } 
         }
   ]
).pretty() 

Výsledek:

{ "start" :ISODate("2021-01-03T00:00:00Z"), "end" :ISODate("2021-01-03T23:30:15.100Z"), "result" :NumberLong(84615100 )}

Pokud změníme data, výsledkem bude záporná hodnota:

db.data.aggregate(
   [
     { $project: { 
       _id: 0,
       start: 1, 
       end: 1,
       result: { 
         $subtract: [ "$start", "$end" ] } } 
         }
   ]
).pretty() 

Výsledek:

{ "start" :ISODate("2021-01-03T00:00:00Z"), "end" :ISODate("2021-01-03T23:30:15.100Z"), "result" :NumberLong(- 84615100)}

Předávání nesprávného počtu argumentů

$subtract operátor přijímá přesně dva argumenty. Předání nesprávného počtu argumentů má za následek chybu.

Příklad:

db.data.aggregate(
   [
     { $project: { 
       result: { 
         $subtract: [ "$a" ] } } 
         }
   ]
) 

Výsledek:

nezachycená výjimka:Chyba:příkaz se nezdařil:{ "ok" :0, "errmsg" :"Neplatný $project ::způsobený ::Výraz $subtract vyžaduje přesně 2 argumenty. Byl předán 1.", "code" :16020, "codeName" :"Location16020"}:agregace selhala :[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

Předávání hodnot Null

Předávání dvou null hodnoty vyústí v null se vrací.

Příklad:

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

Výsledek:

{ "_id" :1, "result" :null }

  1. Které Python API by se mělo používat s Mongo DB a Django

  2. Jak převést pohled MongoDB na sbírku

  3. Instalace MongoDB

  4. Vypočítejte průměrnou hodnotu dokumentu mongodb