Mongoose adalah alat pemodelan objek MongoDB yang dirancang untuk bekerja di lingkungan asinkron. Mongoose mendukung Node.js dan Deno (alpha).
Situs web dokumentasi resmi adalah mongoosejs.com.
Mongoose 8.0.0 dirilis pada tanggal 31 Oktober 2023. Anda dapat menemukan detail selengkapnya tentang perubahan yang dapat menyebabkan kerusakan pada versi 8.0.0 di situs dokumen kami.
Kunjungi situs pencarian plugin untuk melihat ratusan modul terkait dari komunitas. Selanjutnya, pelajari cara menulis plugin Anda sendiri dari dokumen atau postingan blog ini.
Permintaan tarik selalu diterima! Harap mendasarkan permintaan penarikan pada cabang master
dan ikuti panduan kontribusi.
Jika permintaan penarikan Anda membuat perubahan dokumentasi, mohon jangan mengubah file .html
apa pun. File .html
adalah kode yang dikompilasi, jadi harap buat perubahan di docs/*.pug
, lib/*.js
, atau test/docs/*.js
.
Lihat semua 400+ kontributor.
Instal terlebih dahulu Node.js dan MongoDB. Kemudian:
npm install mongoose
Mongoose 6.8.0 juga menyertakan dukungan alfa untuk Deno.
// Using Node.js `require()`
const mongoose = require ( 'mongoose' ) ;
// Using ES6 imports
import mongoose from 'mongoose' ;
Atau, menggunakan createRequire()
Deno untuk dukungan CommonJS sebagai berikut.
import { createRequire } from 'https://deno.land/[email protected]/node/module.ts' ;
const require = createRequire ( import . meta . url ) ;
const mongoose = require ( 'mongoose' ) ;
mongoose . connect ( 'mongodb://127.0.0.1:27017/test' )
. then ( ( ) => console . log ( 'Connected!' ) ) ;
Anda kemudian dapat menjalankan skrip di atas menggunakan yang berikut ini.
deno run --allow-net --allow-read --allow-sys --allow-env mongoose-test.js
Tersedia sebagai bagian dari Langganan Tidelift
Pemelihara luwak dan ribuan paket lainnya bekerja sama dengan Tidelift untuk memberikan dukungan komersial dan pemeliharaan untuk dependensi sumber terbuka yang Anda gunakan untuk membangun aplikasi Anda. Menghemat waktu, mengurangi risiko, dan meningkatkan kesehatan kode, sekaligus membayar pengelola dependensi yang Anda gunakan. Pelajari lebih lanjut.
Pertama, kita perlu mendefinisikan koneksi. Jika aplikasi Anda hanya menggunakan satu database, Anda harus menggunakan mongoose.connect
. Jika Anda perlu membuat koneksi tambahan, gunakan mongoose.createConnection
.
Baik connect
maupun createConnection
menggunakan URI mongodb://
, atau parameter host, database, port, options
.
await mongoose . connect ( 'mongodb://127.0.0.1/my_database' ) ;
Setelah terhubung, acara open
diaktifkan pada instance Connection
. Jika Anda menggunakan mongoose.connect
, Connection
nya adalah mongoose.connection
. Jika tidak, nilai kembalian mongoose.createConnection
adalah Connection
.
Catatan: Jika koneksi lokal gagal coba gunakan 127.0.0.1 daripada localhost. Terkadang masalah mungkin muncul ketika nama host lokal diubah.
Penting! Mongoose mem-buffer semua perintah hingga terhubung ke database. Ini berarti Anda tidak perlu menunggu hingga terhubung ke MongoDB untuk menentukan model, menjalankan kueri, dll.
Model ditentukan melalui antarmuka Schema
.
const Schema = mongoose . Schema ;
const ObjectId = Schema . ObjectId ;
const BlogPost = new Schema ( {
author : ObjectId ,
title : String ,
body : String ,
date : Date
} ) ;
Selain menentukan struktur dokumen Anda dan jenis data yang Anda simpan, Skema menangani definisi:
Contoh berikut menunjukkan beberapa fitur ini:
const Comment = new Schema ( {
name : { type : String , default : 'hahaha' } ,
age : { type : Number , min : 18 , index : true } ,
bio : { type : String , match : / [a-z] / } ,
date : { type : Date , default : Date . now } ,
buff : Buffer
} ) ;
// a setter
Comment . path ( 'name' ) . set ( function ( v ) {
return capitalize ( v ) ;
} ) ;
// middleware
Comment . pre ( 'save' , function ( next ) {
notify ( this . get ( 'email' ) ) ;
next ( ) ;
} ) ;
Lihat contoh di examples/schema/schema.js
untuk contoh penyiapan umum secara end-to-end.
Setelah kita mendefinisikan model melalui mongoose.model('ModelName', mySchema)
, kita dapat mengaksesnya melalui fungsi yang sama
const MyModel = mongoose . model ( 'ModelName' ) ;
Atau lakukan semuanya sekaligus
const MyModel = mongoose . model ( 'ModelName' , mySchema ) ;
Argumen pertama adalah nama tunggal dari koleksi yang digunakan model Anda. Mongoose secara otomatis mencari versi jamak dari nama model Anda. Misalnya saja jika Anda menggunakan
const MyModel = mongoose . model ( 'Ticket' , mySchema ) ;
Maka MyModel
akan menggunakan koleksi tiket , bukan koleksi tiket . Untuk detail lebih lanjut, baca dokumen model.
Setelah kita memiliki model, kita dapat membuat instance-nya, dan menyimpannya:
const instance = new MyModel ( ) ;
instance . my . key = 'hello' ;
await instance . save ( ) ;
Atau kita bisa menemukan dokumen dari koleksi yang sama
await MyModel . find ( { } ) ;
Anda juga dapat findOne
, findById
, update
, dll.
const instance = await MyModel . findOne ( { /* ... */ } ) ;
console . log ( instance . my . key ) ; // 'hello'
Untuk detail lebih lanjut, lihat dokumen.
Penting! Jika Anda membuka koneksi terpisah menggunakan mongoose.createConnection()
tetapi mencoba mengakses model melalui mongoose.model('ModelName')
itu tidak akan berfungsi seperti yang diharapkan karena tidak terhubung ke koneksi db aktif. Dalam hal ini akses model Anda melalui koneksi yang Anda buat:
const conn = mongoose . createConnection ( 'your connection string' ) ;
const MyModel = conn . model ( 'ModelName' , schema ) ;
const m = new MyModel ( ) ;
await m . save ( ) ; // works
vs
const conn = mongoose . createConnection ( 'your connection string' ) ;
const MyModel = mongoose . model ( 'ModelName' , schema ) ;
const m = new MyModel ( ) ;
await m . save ( ) ; // does not work b/c the default connection object was never connected
Pada cuplikan contoh pertama, kami mendefinisikan kunci dalam Skema yang terlihat seperti:
comments: [Comment]
Dimana Comment
adalah Schema
yang kita buat. Artinya, membuat dokumen tersemat semudah:
// retrieve my model
const BlogPost = mongoose . model ( 'BlogPost' ) ;
// create a blog post
const post = new BlogPost ( ) ;
// create a comment
post . comments . push ( { title : 'My comment' } ) ;
await post . save ( ) ;
Hal yang sama berlaku untuk menghapusnya:
const post = await BlogPost . findById ( myId ) ;
post . comments [ 0 ] . deleteOne ( ) ;
await post . save ( ) ;
Dokumen tersemat menikmati semua fitur yang sama seperti model Anda. Default, validator, middleware.
Lihat halaman dokumen.
Anda dapat mencegat argumen metode melalui middleware.
Misalnya, ini akan memungkinkan Anda untuk menyiarkan perubahan tentang Dokumen Anda setiap kali seseorang set
jalur di Dokumen Anda ke nilai baru:
schema . pre ( 'set' , function ( next , path , val , typel ) {
// `this` is the current Document
this . emit ( 'set' , path , val ) ;
// Pass control to the next pre
next ( ) ;
} ) ;
Selain itu, Anda dapat mengubah argumen method
yang masuk sehingga middleware berikutnya melihat nilai berbeda untuk argumen tersebut. Untuk melakukannya, teruskan saja nilai baru ke next
:
schema . pre ( method , function firstPre ( next , methodArg1 , methodArg2 ) {
// Mutate methodArg1
next ( 'altered-' + methodArg1 . toString ( ) , methodArg2 ) ;
} ) ;
// pre declaration is chainable
schema . pre ( method , function secondPre ( next , methodArg1 , methodArg2 ) {
console . log ( methodArg1 ) ;
// => 'altered-originalValOfMethodArg1'
console . log ( methodArg2 ) ;
// => 'originalValOfMethodArg2'
// Passing no arguments to `next` automatically passes along the current argument values
// i.e., the following `next()` is equivalent to `next(methodArg1, methodArg2)`
// and also equivalent to, with the example method arg
// values, `next('altered-originalValOfMethodArg1', 'originalValOfMethodArg2')`
next ( ) ;
} ) ;
type
, ketika digunakan dalam skema memiliki arti khusus dalam Mongoose. Jika skema Anda memerlukan penggunaan type
sebagai properti bersarang, Anda harus menggunakan notasi objek:
new Schema ( {
broken : { type : Boolean } ,
asset : {
name : String ,
type : String // uh oh, it broke. asset will be interpreted as String
}
} ) ;
new Schema ( {
works : { type : Boolean } ,
asset : {
name : String ,
type : { type : String } // works. asset is an object with a type property
}
} ) ;
Mongoose dibangun di atas driver resmi MongoDB Node.js. Setiap model luwak menyimpan referensi ke koleksi driver MongoDB asli. Objek koleksi dapat diakses menggunakan YourModel.collection
. Namun, menggunakan objek koleksi secara langsung melewati semua fitur luwak, termasuk kait, validasi, dll. Satu-satunya pengecualian adalah YourModel.collection
masih menyangga perintah. Dengan demikian, YourModel.collection.find()
tidak akan mengembalikan kursor.
Temukan dokumen API di sini, dibuat menggunakan dox dan bebaskan.
Hak Cipta (c) 2010 LearnBoost <[email protected]>
Izin dengan ini diberikan, secara gratis, kepada siapa pun yang memperoleh salinan perangkat lunak ini dan file dokumentasi terkait (“Perangkat Lunak”), untuk menggunakan Perangkat Lunak tanpa batasan, termasuk namun tidak terbatas pada hak untuk menggunakan, menyalin, memodifikasi, menggabungkan , mempublikasikan, mendistribusikan, mensublisensikan, dan/atau menjual salinan Perangkat Lunak, dan mengizinkan orang yang menerima Perangkat Lunak untuk melakukan hal tersebut, dengan tunduk pada ketentuan berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini akan disertakan dalam semua salinan atau sebagian besar Perangkat Lunak.
PERANGKAT LUNAK INI DISEDIAKAN 'APA ADANYA', TANPA JAMINAN APA PUN, TERSURAT MAUPUN TERSIRAT, TERMASUK NAMUN TIDAK TERBATAS PADA JAMINAN KELAYAKAN UNTUK DIPERDAGANGKAN, KESESUAIAN UNTUK TUJUAN TERTENTU, DAN TIDAK ADA PELANGGARAN. DALAM KEADAAN APA PUN PENULIS ATAU PEMEGANG HAK CIPTA TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN, ATAU TANGGUNG JAWAB LAINNYA, BAIK DALAM TINDAKAN KONTRAK, HUKUM ATAU LAINNYA, YANG TIMBUL DARI, ATAU SEHUBUNGAN DENGAN PERANGKAT LUNAK ATAU PENGGUNAAN ATAU HAL-HAL LAIN DALAM PERANGKAT LUNAK.