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

MongoDB $slice

Di MongoDB, $slice operator pipeline agregasi mengembalikan subset array.

Untuk menggunakan $slice , Anda menentukan jumlah elemen yang akan dikembalikan dari larik. Anda juga dapat menentukan posisi awal untuk mengambil subset dari larik.

Contoh

Misalkan kita memiliki koleksi yang disebut test dengan dokumen berikut:

{ "_id" : 1, "data" : [ "Aardvark", "Buffalo", "Cat", "Dog", "Horse", "Gorilla", "Zebra" ] }

Kita bisa menggunakan $slice untuk mengambil subset dari array di data lapangan.

Bilangan Bulat Positif

Memberikan satu nilai positif menentukan posisi awal dari awal larik.

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

Hasil:

{ "result" : [ "Aardvark", "Buffalo", "Cat" ] }

Dalam hal ini, kami memberikan angka positif 3 , dan tiga elemen pertama yang dikembalikan dari larik.

Bilangan Bulat Negatif

Memberikan nilai negatif tunggal menentukan posisi awal dari akhir dari larik.

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

Hasil:

{ "result" : [ "Horse", "Gorilla", "Zebra" ] }

Dalam hal ini kami mengembalikan tiga elemen terakhir dari larik.

Perhatikan bahwa Anda tidak dapat menentukan bilangan bulat negatif saat Anda juga menentukan posisi awal. Lebih lanjut tentang ini nanti.

Tentukan Posisi Awal

Anda juga memiliki pilihan untuk menentukan posisi awal. Untuk melakukannya, berikan bilangan bulat lain sebelum yang lain.

Bilangan Bulat Positif

Berikut adalah contoh penggunaan bilangan bulat positif untuk posisi awal:

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

Hasil:

{ "result" : [ "Cat", "Dog", "Horse" ] }

Dalam hal ini kami menentukan posisi awal 2 dan ukuran irisan 3 .

Perhatikan bahwa array berbasis nol, dan oleh karena itu bilangan bulat positif kami 2 mengakibatkan operasi irisan dimulai dari posisi ketiga.

Bilangan Bulat Negatif

Berikut ini contoh penggunaan bilangan bulat negatif untuk posisi awal:

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

Hasil:

{ "result" : [ "Dog", "Horse", "Gorilla" ] }

Dalam hal ini, kami menetapkan -4 , yang mengakibatkan operasi irisan menghitung mundur empat tempat dari akhir.

Irisan Besar

Memberikan ukuran irisan yang lebih besar dari elemen yang tersedia dalam larik hanya akan menghasilkan elemen larik yang tersisa.

Contoh:

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

Hasil:

{ "result" : [ "Zebra" ] }

Di sini kami menetapkan bahwa tiga elemen harus dikembalikan, meskipun kami hanya memulai satu posisi kembali dari akhir array. Dalam hal ini, hanya satu elemen yang dikembalikan (yang terakhir dalam larik).

Di Luar Jangkauan Posisi Awal

Memberikan posisi awal yang berada di luar jangkauan larik dapat mengembalikan beberapa elemen atau larik kosong. Itu semua tergantung pada nilai yang diberikan.

Berikut adalah contoh yang mengembalikan array kosong:

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

Hasil:

{ "result" : [ ] }

Ini mengembalikan array kosong karena posisi awalnya adalah 10 , meskipun hanya ada 7 elemen dalam array (dan hitungan akan beralih dari 0 ke 6 ).

Namun, jika kami memberikan nilai negatif yang lebih besar dari ukuran larik, irisan dimulai dari awal larik.

Contoh:

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

Hasil:

{ "result" : [ "Aardvark", "Buffalo", "Cat" ] }

Slice Negatif dengan Posisi Awal

Seperti yang disebutkan, Anda tidak dapat menentukan bilangan bulat negatif saat Anda juga menentukan posisi awal. Melakukan ini menghasilkan kesalahan.

Contoh:

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

Hasil:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "Third argument to $slice must be positive: -3",
	"code" : 28729,
	"codeName" : "Location28729"
} : 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

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. CouchDB vs. MongoDB:10 hal yang harus Anda ketahui

  2. Indeks unik di luwak tidak berfungsi

  3. Spring Data MongoDB - Anotasi @CreatedDate tidak berfungsi saat menggunakan dengan bidang Id khusus

  4. Streaming dari kursor mongodb ke respons Express di node.js

  5. MongoDB atau CouchDB - cocok untuk produksi?