Ketika Anda bertanya tentang kelayakan javascript sisi-server, pertama-tama Anda harus menjelaskan jenis javascript sisi-server apa yang sedang Anda bicarakan. Menurut dokumentasi , ada empat jenis eksekusi kode sisi server yang berbeda. Sayangnya mereka semua adalah semacam solusi peretasan untuk situasi di mana API asli tidak mencukupi:
eval perintah
eval memiliki kelemahan yaitu hanya berjalan pada satu node. Ini sangat mengurangi kegunaannya dalam lingkungan berkerumun. Dengan koleksi sharding, itu tidak berfungsi sama sekali!
Secara default, ini juga membuat kunci global yang membuat database benar-benar tidak dapat digunakan hingga skrip dijalankan. Ini dapat dicegah dengan nolock
argumen (kecuali skrip itu sendiri melakukan sesuatu yang membuat kunci global).
Jawaban Sammaye juga menjelaskan beberapa masalah keamanan yang serius.
Ini benar-benar lebih merupakan alat tes dan administrasi daripada sesuatu yang harus Anda gunakan untuk operasi reguler apa pun.
Menjalankan file .js melalui Instance shell mongo di Server
Dalam hal ini, kode tidak dieksekusi pada database, melainkan pada proses independen lain di salah satu server. Ini berarti bahwa semua data yang diperlukan dari pecahan lain harus ditransfer ke server yang menjalankan kode javascript, tidak peduli apa yang sebenarnya dikembalikan oleh skrip.
Itu muncul sebagai aplikasi lain ke server mongodb, jadi itu tidak dapat melakukan apa pun yang juga tidak dapat Anda lakukan dari dalam aplikasi biasa Anda. Ini adalah alat tes dan administrasi lain yang tidak boleh Anda gunakan dalam operasi reguler.
Temukan dengan $where -operator
Operator $where dalam perintah find memungkinkan untuk melewatkan fungsi javascript yang digunakan untuk memfilter nilai. Untuk sebagian besar kasus sepele, performa ini jauh lebih rendah daripada yang ditawarkan alat lain dari kueri pencarian, terutama karena tidak dapat menggunakan indeks apa pun.
Ketika penggunaan $where tidak dapat dihindari, setidaknya coba gunakan beberapa alat normal dari find-query untuk mengurangi kumpulan dokumen yang perlu diteruskan ke fungsi $where.
MapReduce
MapReduce menggunakan dua fungsi javascript untuk membuat data agregat. Dulunya adalah alat penambangan data utama untuk MongoDB, tetapi sebagian besar kasus penggunaan yang biasa sekarang dipenuhi oleh kerangka kerja agregasi .
Ini juga memiliki kelemahan yang sama dengan $where:Kecuali Anda memfilter, Anda harus menjalankan tidak hanya satu tetapi setidaknya dua fungsi javascript untuk setiap dokumen.
Tapi MapReduce setidaknya bisa berjalan terdistribusi dan bisa diparalelkan.
tl;dr:
Menggunakan Javascript adalah langkah terakhir untuk kueri yang sangat tidak biasa yang tidak dapat dibuat dengan bahasa kueri normal dan yang memerlukan akses ke terlalu banyak data untuk diimplementasikan dalam aplikasi. Jika memungkinkan, lakukan apa yang ingin Anda lakukan dengan alat khusus yang telah tersedia atau terapkan logika Anda pada lapisan aplikasi.