Mongoose는 비동기 환경에서 작동하도록 설계된 MongoDB 객체 모델링 도구입니다. Mongoose는 Node.js와 Deno(알파)를 지원합니다.
공식 문서 웹사이트는 mongoosejs.com입니다.
Mongoose 8.0.0은 2023년 10월 31일에 출시되었습니다. 8.0.0의 이전 버전과 관련된 주요 변경 사항에 대한 자세한 내용은 문서 사이트에서 확인할 수 있습니다.
커뮤니티에서 수백 개의 관련 모듈을 보려면 플러그인 검색 사이트를 확인하세요. 다음으로, 문서나 이 블로그 게시물에서 자신만의 플러그인을 작성하는 방법을 알아보세요.
Pull Request는 언제나 환영입니다! master
브랜치에 대한 풀 요청을 기반으로 하고 기여 가이드를 따르세요.
끌어오기 요청으로 인해 문서가 변경되는 경우 .html
파일을 수정 하지 마세요. .html
파일은 컴파일된 코드이므로 docs/*.pug
, lib/*.js
또는 test/docs/*.js
에서 변경하세요.
400명 이상의 기여자를 모두 확인하세요.
먼저 Node.js와 MongoDB를 설치하세요. 그 다음에:
npm install mongoose
Mongoose 6.8.0에는 Deno에 대한 알파 지원도 포함되어 있습니다.
// Using Node.js `require()`
const mongoose = require ( 'mongoose' ) ;
// Using ES6 imports
import mongoose from 'mongoose' ;
또는 다음과 같이 CommonJS 지원을 위해 Deno의 createRequire()
사용합니다.
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!' ) ) ;
그런 다음 다음을 사용하여 위 스크립트를 실행할 수 있습니다.
deno run --allow-net --allow-read --allow-sys --allow-env mongoose-test.js
Tidelift 구독의 일부로 사용 가능
mongoose 및 수천 개의 기타 패키지 관리자는 Tidelift와 협력하여 애플리케이션 구축에 사용하는 오픈 소스 종속성에 대한 상업적 지원 및 유지 관리를 제공하고 있습니다. 시간을 절약하고 위험을 줄이며 코드 상태를 개선하는 동시에 사용하는 정확한 종속성에 대한 비용을 관리자에게 지불합니다. 자세히 알아보세요.
먼저 연결을 정의해야 합니다. 앱이 하나의 데이터베이스만 사용하는 경우 mongoose.connect
사용해야 합니다. 추가 연결을 생성해야 하는 경우 mongoose.createConnection
사용하세요.
connect
및 createConnection
모두 mongodb://
URI 또는 매개변수 host, database, port, options
사용합니다.
await mongoose . connect ( 'mongodb://127.0.0.1/my_database' ) ;
연결되면 Connection
인스턴스에서 open
이벤트가 시작됩니다. mongoose.connect
사용하는 경우 Connection
mongoose.connection
입니다. 그렇지 않으면 mongoose.createConnection
반환 값은 Connection
입니다.
참고: 로컬 연결에 실패하면 localhost 대신 127.0.0.1을 사용해 보십시오. 때로는 로컬 호스트 이름이 변경되면 문제가 발생할 수 있습니다.
중요한! Mongoose는 데이터베이스에 연결될 때까지 모든 명령을 버퍼링합니다. 즉, 모델 정의, 쿼리 실행 등을 위해 MongoDB에 연결될 때까지 기다릴 필요가 없습니다.
모델은 Schema
인터페이스를 통해 정의됩니다.
const Schema = mongoose . Schema ;
const ObjectId = Schema . ObjectId ;
const BlogPost = new Schema ( {
author : ObjectId ,
title : String ,
body : String ,
date : Date
} ) ;
문서의 구조와 저장하는 데이터 유형을 정의하는 것 외에도 스키마는 다음의 정의를 처리합니다.
다음 예에서는 이러한 기능 중 일부를 보여줍니다.
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 ( ) ;
} ) ;
일반적인 설정의 전체 예를 보려면 examples/schema/schema.js
의 예를 살펴보세요.
mongoose.model('ModelName', mySchema)
통해 모델을 정의하면 동일한 함수를 통해 해당 모델에 액세스할 수 있습니다.
const MyModel = mongoose . model ( 'ModelName' ) ;
아니면 한번에 다 해보세요
const MyModel = mongoose . model ( 'ModelName' , mySchema ) ;
첫 번째 인수는 모델이 속한 컬렉션의 단수 이름입니다. Mongoose는 모델 이름의 복수형 버전을 자동으로 찾습니다. 예를 들어, 다음을 사용하는 경우
const MyModel = mongoose . model ( 'Ticket' , mySchema ) ;
그러면 MyModel
티켓 수집이 아닌 티켓 수집을 사용합니다. 자세한 내용은 모델 문서를 참조하세요.
모델이 있으면 인스턴스화하고 저장할 수 있습니다.
const instance = new MyModel ( ) ;
instance . my . key = 'hello' ;
await instance . save ( ) ;
또는 동일한 컬렉션에서 문서를 찾을 수도 있습니다.
await MyModel . find ( { } ) ;
findOne
, findById
, update
등도 가능합니다.
const instance = await MyModel . findOne ( { /* ... */ } ) ;
console . log ( instance . my . key ) ; // 'hello'
자세한 내용은 문서를 확인하세요.
중요한! mongoose.createConnection()
사용하여 별도의 연결을 열었지만 mongoose.model('ModelName')
통해 모델에 액세스하려고 하면 활성 DB 연결에 연결되어 있지 않으므로 예상대로 작동하지 않습니다. 이 경우 생성한 연결을 통해 모델에 액세스합니다.
const conn = mongoose . createConnection ( 'your connection string' ) ;
const MyModel = conn . model ( 'ModelName' , schema ) ;
const m = new MyModel ( ) ;
await m . save ( ) ; // works
대
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
첫 번째 예제 코드 조각에서는 다음과 같은 스키마에 키를 정의했습니다.
comments: [Comment]
Comment
우리가 만든 Schema
입니다. 이는 포함된 문서를 만드는 것이 다음과 같이 간단하다는 것을 의미합니다.
// 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 ( ) ;
제거하는 경우에도 마찬가지입니다.
const post = await BlogPost . findById ( myId ) ;
post . comments [ 0 ] . deleteOne ( ) ;
await post . save ( ) ;
포함된 문서는 모델과 동일한 기능을 모두 사용할 수 있습니다. 기본값, 유효성 검사기, 미들웨어.
문서 페이지를 참조하세요.
미들웨어를 통해 메서드 인수를 가로챌 수 있습니다.
예를 들어, 누군가가 문서의 sa 경로를 새 값으로 set
때마다 문서에 대한 변경 사항을 브로드캐스트할 수 있습니다.
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 ( ) ;
} ) ;
또한 후속 미들웨어가 해당 인수에 대해 다른 값을 볼 수 있도록 들어오는 method
인수를 변경할 수 있습니다. 그렇게 하려면 새 값을 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
스키마에 사용될 때 Mongoose 내에서 특별한 의미를 갖습니다. 스키마에서 type
중첩 속성으로 사용해야 하는 경우 객체 표기법을 사용해야 합니다.
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는 공식 MongoDB Node.js 드라이버를 기반으로 구축되었습니다. 각 몽구스 모델은 기본 MongoDB 드라이버 컬렉션에 대한 참조를 유지합니다. 컬렉션 개체는 YourModel.collection
사용하여 액세스할 수 있습니다. 그러나 컬렉션 개체를 사용하면 후크, 유효성 검사 등을 포함한 모든 몽구스 기능을 직접 우회합니다. YourModel.collection
이 여전히 명령을 버퍼링한다는 주목할만한 예외가 있습니다. 따라서 YourModel.collection.find()
커서를 반환 하지 않습니다 .
여기에서 dox 및 acquit을 사용하여 생성된 API 문서를 찾으세요.
저작권 (c) 2010 LearnBoost <[email protected]>
본 소프트웨어 및 관련 문서 파일('소프트웨어')의 사본을 취득한 모든 사람에게 사용, 복사, 수정, 병합에 대한 권리를 포함하되 이에 국한되지 않고 제한 없이 소프트웨어를 취급할 수 있는 권한이 무료로 부여됩니다. , 소프트웨어 사본을 게시, 배포, 재라이센스 부여 및/또는 판매하고, 소프트웨어를 제공받은 사람에게 다음 조건에 따라 그렇게 하도록 허용합니다.
위의 저작권 고지와 본 허가 고지는 소프트웨어의 모든 사본 또는 상당 부분에 포함됩니다.
소프트웨어는 상품성, 특정 목적에의 적합성 및 비침해에 대한 보증을 포함하되 이에 국한되지 않고 명시적이든 묵시적이든 어떠한 종류의 보증 없이 '있는 그대로' 제공됩니다. 어떠한 경우에도 작성자나 저작권 보유자는 계약, 불법 행위 또는 기타 행위로 인해 소프트웨어나 사용 또는 기타 거래와 관련하여 발생하는 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다. 소프트웨어.