sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $pow

I MongoDB er $pow aggregeringspipeline-operatør hæver et tal til den angivne eksponent og returnerer resultatet

$pow accepterer to udtryk, der leveres i et array. Den første er tallet, og den anden er eksponenten. Begge kan være et hvilket som helst gyldigt udtryk, så længe de løses til et tal.

Eksempel

Antag, at vi har en samling kaldet test med følgende dokumenter:

{ "_id" : 1, "data" : 10 }
{ "_id" : 2, "data" : -3 }
{ "_id" : 3, "data" : 0 }
{ "_id" : 4, "data" : null }

Vi kan bruge $pow operatør for at hæve data felt af en specificeret eksponent:

db.test.aggregate(
  [
    { $project: { 
        _id: 0,
        result: { $pow: [ "$data", 3 ] }
      }
    }
  ]
)

Resultat:

{ "result" : 1000 }
{ "result" : -27 }
{ "result" : 0 }
{ "result" : null }

I dette tilfælde brugte jeg data felt som nummer, og 3 som eksponent. Derfor havde hvert dokument sine data felt hævet med 3 potens.

Vi kan se, at null værdier returnerer null .

Resultatet er normalt den samme type som inputtet. Der er dog undtagelser fra denne regel. Specifikt:

  • Et 32-bit heltal vil blive konverteret til et 64-bit heltal, hvis resultatet kan repræsenteres som et 64-bit heltal.
  • Et 32-bit heltal vil blive konverteret til et dobbelt, hvis resultatet ikke kan repræsenteres som et 64-bit heltal.
  • Et 64-bit heltal vil blive konverteret til det dobbelte, hvis resultatet ikke kan repræsenteres som et 64-bit heltal.

Negativ eksponent

Du kan ikke hæve nul (0 ) til en negativ eksponent.

Eksempel:

db.test.aggregate(
  [
    { $match: { _id: 3 } },
    { $project: { 
        _id: 0,
        result: { $pow: [ "$data", -3 ] }
      }
    }
  ]
)

Resultat:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "$pow cannot take a base of 0 and a negative exponent",
	"code" : 28764,
	"codeName" : "Location28764"
} : 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

Fejlen siger eksplicit, at "$pow kan ikke tage en base på 0 og en negativ eksponent “.

Men hvis vi udelukker dokument 3, får vi ikke længere fejlen:

db.test.aggregate(
  [
    { $match: { _id: { $nin: [ 3 ] } } },
    { $project: { 
        result: { $pow: [ "$data", -3 ] }
      }
    }
  ]
)

Resultat:

{ "_id" : 1, "result" : 0.001 }
{ "_id" : 2, "result" : -0.037037037037037035 }
{ "_id" : 4, "result" : null }

NaN-værdier

Hvis argumentet løses til NaN , $pow returnerer NaN .

Eksempel:

db.test.aggregate(
  [
    { $project: { 
        _id: 0,
        result: { $pow: [ "$data" * 1, 3 ] }
      }
    }
  ]
)

Resultat:

{ "result" : NaN }
{ "result" : NaN }
{ "result" : NaN }
{ "result" : NaN }

Ikke-eksisterende felter

Hvis $pow operator anvendes mod et felt, der ikke eksisterer, null er returneret.

Eksempel:

db.test.aggregate(
  [
    { $project: { 
        _id: 0,
        result: { $pow: [ "$beer", 3 ] }
      }
    }
  ]
)

Resultat:

{ "result" : null }
{ "result" : null }
{ "result" : null }
{ "result" : null }

Nul-eksponent

Vi har allerede set, at en null værdi returnerer null . Dette gælder også, når du angiver null som eksponent.

Eksempel:

db.test.aggregate(
  [
    { $project: { 
        _id: 0,
        result: { $pow: [ "$data", null ] }
      }
    }
  ]
)

Resultat:

{ "result" : null }
{ "result" : null }
{ "result" : null }
{ "result" : null }

  1. Bulk skær ydeevne i MongoDB til store samlinger

  2. Unik scoring for Redis leaderboard

  3. Hvordan øger man et felt i mongodb?

  4. Redis Enterprise Clustering Command Fejl 'CLUSTER'