MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB $mod

Di MongoDB, $mod operator pipa agregasi membagi satu angka dengan angka lainnya dan mengembalikan sisanya.

Untuk menggunakan $mod , berikan dua angka dalam larik. $mod operator akan membagi angka pertama dengan angka kedua dan mengembalikan sisanya. Dengan kata lain, angka pertama adalah pembagian, dan angka kedua adalah pembagi.

Argumen dapat berupa ekspresi apa pun yang valid selama argumen tersebut menghasilkan angka.

Contoh

Misalkan kita memiliki koleksi yang disebut data dengan dokumen sebagai berikut:

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

Kita dapat menggunakan $mod operator dalam pipa agregasi untuk membagi a bidang dengan b bidang, dan kembalikan sisanya:

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

Hasil:

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

Dengan kata lain, kita mendapatkan a modulo b .

Jika kita ingin mendapatkan b modulo a , kita perlu menukarnya.

Contoh:

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

Hasil:

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

Bilangan Negatif

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

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

Ini termasuk angka negatif. Tapi itu tidak masalah, karena bilangan negatif tetaplah bilangan, dan kita pasti bisa mendapatkan modulo saat bekerja dengan bilangan negatif.

Contoh:

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

Hasil:

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

Jenis Data Salah

Argumen yang diberikan kepada $mod dapat berupa ekspresi apa pun yang valid, selama ekspresi tersebut menghasilkan angka.

Misalkan kita memiliki dokumen berikut:

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

Dan kami menerapkan $mod ke dokumen itu:

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

Hasil:

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

Kesalahan menyatakan bahwa $mod only supports numeric types .

Nilai Null

Memberikan null untuk salah satu argumen mengembalikan null .

Misalkan kita memiliki dokumen berikut:

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

Dan kami menerapkan $mod ke dokumen-dokumen itu:

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

Hasil:

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

Bidang Tidak Ada

Bidang yang hilang mengembalikan null .

Misalkan kita memiliki dokumen berikut:

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

Terapkan $mod :

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

Hasil:

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

Tambahkan Nomor Anda Sendiri

Anda tidak perlu dibatasi hanya pada angka-angka dalam dokumen. Anda dapat menggunakan nomor Anda sendiri jika Anda perlu membagi bidang dengan jumlah yang tetap.

Contoh:

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

Hasil:

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

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Luwak, Pilih bidang tertentu dengan find

  2. MongoDB - Tarik beberapa objek dari array

  3. Permintaan MongoDB/Mongoose pada tanggal tertentu?

  4. Pustaka janji default Mongoose tidak digunakan lagi di tumpukan MEAN

  5. MongoDB - Lepaskan array menggunakan agregasi dan hapus duplikat