MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB $odejmowanie

W MongoDB możesz użyć $subtract operator potoku agregacji do odejmowania liczb i/lub dat.

W szczególności $subtract może wykonać następujące trzy rzeczy:

  • Odejmij dwie liczby, aby zwrócić różnicę
  • Odejmij liczbę (w milisekundach) od daty i zwróć wynikową datę
  • Odejmij dwie daty, aby zwrócić różnicę w milisekundach

$subtract operator przyjmuje wartości jako argumenty. Argumenty mogą być dowolnymi poprawnymi wyrażeniami, o ile są rozstrzygane na liczby i/lub daty. Aby odjąć liczbę od daty, data musi być pierwszym argumentem.

Przykładowe dane

Załóżmy, że mamy kolekcję o nazwie data z następującym dokumentem:

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

Odejmij liczby

Możemy użyć $subtract operator do odjęcia a pole z b pole (lub odwrotnie).

Przykład:

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

Wynik:

{ "a" : 20000, "b" : 250, "result" : 19750 }

Odejmij liczbę od daty

Jeśli pierwszy argument to data, a drugi to liczba, $subtract operator odejmuje liczbę od daty w milisekundach.

Przykład:

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

Wynik:

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

Widzimy, że od daty odjęto 250 milisekund.

Kiedy odejmujemy liczbę od daty, data musi być pierwszym argumentem, a liczba jako drugim argumentem.

Oto, co się stanie, jeśli zamienimy argumenty:

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

Wynik:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "cant $subtract adate from a double",
	"code" : 16556,
	"codeName" : "Location16556"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

Otrzymujemy błąd informujący nas, że nie można odjąć daty od podwojenia.

Zwróć różnicę między dwiema datami

Jeśli oba argumenty są datami, to $subtract operator zwraca różnicę między dwiema datami w milisekundach.

Przykład:

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

Wynik:

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

Jeśli zmienimy daty, wynik stanie się wartością ujemną:

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

Wynik:

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

Przekazywanie niewłaściwej liczby argumentów

$subtract operator akceptuje dokładnie dwa argumenty. Przekazanie niewłaściwej liczby argumentów skutkuje błędem.

Przykład:

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

Wynik:

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 :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

Przekazywanie wartości zerowych

Przekazywanie dwóch null wartości dają w wyniku null zostanie zwrócony.

Przykład:

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

Wynik:

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

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $przykładowa stawka

  2. Jak usunąć dokument, do którego odwołuje się identyfikator w mongoDB z php?

  3. Tablica Mongodb $push i $pull

  4. MongoDB $toDouble

  5. Django-nonrel vs Django-mongodb vs Mongokit vs pymongo native