Ya. Begitulah cara javascript Array.prototype.slice()
metode bekerja, yang digunakan secara internal oleh mongodb.
Menurut Spesifikasi Bahasa ECMAScript® ,
Dalam kasus Anda relativeStart is -10
,k = max((-10+5),0), k = 0;
(di mana, 5
adalah panjang larik Anda).
Oleh karena itu k
atau skip
akan selalu 0
, dalam kasus ini.
Ya, operator proyeksi bekerja seperti itu. Kecuali inclusion
atau exclusion
secara eksplisit ditentukan dalam parameter proyeksi, seluruh dokumen diambil dengan operator proyeksi seperti $slice
,$elemmatch
sedang diterapkan.
db.items.findOne({},{"_id":1,"List": { "$slice": [-10, 3 ] }})
akan kembali:
{ "_id" : ObjectId("542babf265f5de9a0d5c2928"), "List" : [ 1, 2, 3 ] }
Parameter kedua ke findOne()
metode not only for simple projection
tujuan, bidang tidak diproyeksikan, hanya jika salah satu dari field
nama memiliki nilai 0
atau 1
melawan mereka. Jika tidak seluruh dokumen dikembalikan. Jika ada bidang yang memiliki projection operator
untuk diterapkan, itu akan applied
dan projected
.
Mekanisme proyeksi sepertinya terjadi dengan cara di bawah ini, setiap kali $slice
operator terlibat.
- Secara default, semua bidang akan disertakan untuk proyeksi.
- Secara Default semua bidang yang nilainya diturunkan berdasarkan operator proyeksi,
$slice
, jika benar , selalu ditampilkan, terlepas dari yang di bawah ini.
Langkah-langkah yang dilakukan untuk pengecualian atau penyertaan.
- Daftar bidang yang ditentukan dalam parameter proyeksi diakumulasikan dalam urutan yang ditentukan.
- Hanya untuk bidang pertama yang ditemukan dengan nilai '0' atau '1' :Jika bidang memiliki nilai '0' - maka bidang tersebut dikecualikan, dan semua bidang yang tersisa ditandai untuk disertakan.Jika bidang memiliki '1' - maka bidang tersebut disertakan, dan semua bidang yang tersisa ditandai untuk dikecualikan.
- Untuk semua kolom berikutnya, kolom tersebut dikecualikan atau disertakan berdasarkan nilainya.