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

MongoDB $mod

I MongoDB er $mod aggregeringspipeline-operatør deler et tal med et andet og returnerer resten.

For at bruge $mod , videregive de to tal i en matrix. $mod operatør deler det første tal med det andet tal og returnerer resten. Med andre ord er det første tal udbyttet, og det andet tal er divisor.

Argumenterne kan være et hvilket som helst gyldigt udtryk, så længe de løses til tal.

Eksempel

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

{ "_id" : 1, "a" : 10, "b" : 2 }
{ "_id" : 2, "a" : 10, "b" : 3 }
{ "_id" : 3, "a" : 10.5, "b" : 2 }

Vi kan bruge $mod operatør inden for en aggregeringspipeline for at opdele a feltet ved b felt, og returner resten:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 1, 2, 3 ] } } },
     { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        result: { $mod: [ "$a", "$b" ] } } 
         }
   ]
)

Resultat:

{ "a" : 10, "b" : 2, "result" : 0 }
{ "a" : 10, "b" : 3, "result" : 1 }
{ "a" : 10.5, "b" : 2, "result" : 0.5 }

Med andre ord får vi a modulo b .

Hvis vi ønsker at få b modulo a , bliver vi nødt til at bytte dem rundt.

Eksempel:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 1, 2, 3 ] } } },
     { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        result: { $mod: [ "$b", "$a" ] } } 
         }
   ]
)

Resultat:

{ "a" : 10, "b" : 2, "result" : 2 }
{ "a" : 10, "b" : 3, "result" : 3 }
{ "a" : 10.5, "b" : 2, "result" : 2 }

Negative tal

Antag, at vi føjer følgende dokumenter til vores samling:

{ "_id" : 4, "a" : -10, "b" : 3 }
{ "_id" : 5, "a" : 10, "b" : -3 }
{ "_id" : 6, "a" : -10, "b" : -3 }

Disse inkluderer negative tal. Men det er ikke et problem, for negative tal er stadig tal, og vi kan bestemt få modulo, når vi arbejder med negative tal.

Eksempel:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 4, 5, 6 ] } } },
     { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        result: { $mod: [ "$a", "$b" ] } } 
         }
   ]
)

Resultat:

{ "a" : -10, "b" : 3, "result" : -1 }
{ "a" : 10, "b" : -3, "result" : 1 }
{ "a" : -10, "b" : -3, "result" : -1 }

Forkert datatype

Argumenterne givet til $mod kan være et hvilket som helst gyldigt udtryk, så længe de løses til tal.

Antag, at vi har følgende dokument:

{ "_id" : 7, "a" : "Ten", "b" : 2 }

Og vi anvender $mod til det dokument:

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

Resultat:

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "$mod only supports numeric types, not string and double",
	"code" : 16611,
	"codeName" : "Location16611"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

Fejlen angiver, at $mod only supports numeric types .

Nul-værdier

Giver null for ethvert af argumenterne returnerer null .

Antag, at vi har følgende dokumenter:

{ "_id" : 8, "a" : 10, "b" : null }
{ "_id" : 9, "a" : null, "b" : 10 }
{ "_id" : 10, "a" : null, "b" : null }

Og vi anvender $mod til disse dokumenter:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 8, 9, 10 ] } } },
     { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        result: { $mod: [ "$a", "$b" ] } } 
         }
   ]
)

Resultat:

{ "a" : 10, "b" : null, "result" : null }
{ "a" : null, "b" : 10, "result" : null }
{ "a" : null, "b" : null, "result" : null }

Manglende felter

Manglende felter returnerer null .

Antag, at vi har følgende dokumenter:

{ "_id" : 11, "a" : 10 }
{ "_id" : 12, "b" : 2 }
{ "_id" : 13 }

Anvend $mod :

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 11, 12, 13 ] } } },
     { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        result: { $mod: [ "$a", "$b" ] } } 
         }
   ]
)

Resultat:

{ "a" : 10, "result" : null }
{ "b" : 2, "result" : null }
{ "result" : null }

Tilføj dit eget nummer

Du er ikke nødvendigvis begrænset til kun numrene i dokumentet/erne. Du kan bruge dine egne tal, hvis du skal dividere et felt med et fast beløb.

Eksempel:

db.data.aggregate(
   [
     { $match: { _id: { $in: [ 1, 2, 3 ] } } },
     { $project: { 
        _id: 0,
        a: 1,
        b: 1,
        result: { $mod: [ "$a", 5.2 ] } } 
         }
   ]
)

Resultat:

{ "a" : 10, "b" : 2, "result" : 4.8 }
{ "a" : 10, "b" : 3, "result" : 4.8 }
{ "a" : 10.5, "b" : 2, "result" : 0.09999999999999964 }

  1. MongoDB/Mongoose forespørger på en bestemt dato?

  2. hvor mange samlede forbindelser eller max forbindelser er tilgængelige i Redis Server?

  3. SSL-forbindelse til Redis med StackExchange.Redis

  4. ScaleGrid annoncerer MongoDB Hosting Services i Canada