連線
Connection()
Connection.prototype.asPromise()
Connection.prototype.client
Connection.prototype.close()
Connection.prototype.collection()
Connection.prototype.collections
Connection.prototype.config
Connection.prototype.createCollection()
Connection.prototype.createCollections()
Connection.prototype.db
Connection.prototype.deleteModel()
Connection.prototype.destroy()
Connection.prototype.dropCollection()
Connection.prototype.dropDatabase()
Connection.prototype.get()
Connection.prototype.getClient()
Connection.prototype.host
Connection.prototype.id
Connection.prototype.listCollections()
Connection.prototype.listDatabases()
Connection.prototype.model()
Connection.prototype.modelNames()
Connection.prototype.models
Connection.prototype.name
Connection.prototype.openUri()
Connection.prototype.pass
Connection.prototype.plugin()
Connection.prototype.plugins
Connection.prototype.port
Connection.prototype.readyState
Connection.prototype.removeDb()
Connection.prototype.set()
Connection.prototype.setClient()
Connection.prototype.startSession()
Connection.prototype.syncIndexes()
Connection.prototype.transaction()
Connection.prototype.useDb()
Connection.prototype.user
Connection.prototype.watch()
Connection.prototype.withSession()
Connection()
參數
base
«Mongoose» 一個 mongoose 實例
繼承
連線建構函式
基於實務考量,一個連線等於一個 Db。
Connection.prototype.asPromise()
返回
- «Promise»
返回一個 promise,當此連線成功連線到 MongoDB 時 resolve,或當此連線連線失敗時 reject。
範例
const conn = await mongoose.createConnection('mongodb://127.0.0.1:27017/test').
asPromise();
conn.readyState; // 1, means Mongoose is connected
Connection.prototype.client
類型
- «屬性»
此連線用來與 MongoDB 通訊的 MongoClient 實例。當連線開啟時,Mongoose 會自動設定此屬性。
Connection.prototype.close()
參數
[force]
«Boolean» 可選
返回
- «Promise»
關閉連線
Connection.prototype.collection()
參數
name
«String» 集合的名稱[options]
«Object» 可選的集合選項
返回
- «Collection» 集合實例
檢索原始集合實例,如果未快取則建立它。此方法返回 [MongoDB Node.js 驅動程式集合](MongoDB Node.js 驅動程式集合) 的精簡包裝器。使用 Collection 會繞過 Mongoose 中介軟體、驗證和類型轉換,讓您可以直接使用 MongoDB Node.js 驅動程式 功能。
Connection.prototype.collections
類型
- «屬性»
與此連線關聯的集合的雜湊表
Connection.prototype.config
類型
- «屬性»
與此連線關聯的全域選項的雜湊表
Connection.prototype.createCollection()
參數
collection
«string» 要建立的集合[options]
«Object» 請參閱 MongoDB 驅動程式文件
返回
- «Promise»
createCollection()
的輔助函式。將明確使用指定的選項建立給定的集合。用於從 mongoose 建立 capped 集合 和 視圖。
選項會未經修改地傳遞到 MongoDB 驅動程式的 createCollection()
函式
Connection.prototype.createCollections()
參數
continueOnError
«Boolean» 如果為 true,將繼續建立集合,並為發生錯誤的集合建立新的錯誤類別。
依序在模型上呼叫 createCollection()
。
Connection.prototype.db
類型
- «屬性»
mongodb.Db 實例,在連線開啟時設定
Connection.prototype.deleteModel()
參數
name
«String|RegExp» 如果是字串,則是要移除的模型名稱。如果是 regexp,則移除所有名稱符合 regexp 的模型。
返回
- «Connection» 此連線
如果存在,則從此連線中移除名為 name
的模型。您可以使用此函式來清除您在測試中建立的任何模型,以防止 OverwriteModelErrors。
範例
conn.model('User', new Schema({ name: String }));
console.log(conn.model('User')); // Model object
conn.deleteModel('User');
console.log(conn.model('User')); // undefined
// Usually useful in a Mocha `afterEach()` hook
afterEach(function() {
conn.deleteModel(/.+/); // Delete every model
});
Connection.prototype.destroy()
參數
[force]
«Boolean»
銷毀連線。類似於 .close
,但也會從 Mongoose 的 connections
清單中移除連線,並防止連線被重新開啟。
Connection.prototype.dropCollection()
參數
collection
«string» 要刪除的集合
返回
- «Promise»
dropCollection()
的輔助函式。將刪除給定的集合,包括所有文件和索引。
Connection.prototype.dropDatabase()
返回
- «Promise»
dropDatabase()
的輔助函式。刪除給定的資料庫,包括所有集合、文件和索引。
範例
const conn = mongoose.createConnection('mongodb://127.0.0.1:27017/mydb');
// Deletes the entire 'mydb' database
await conn.dropDatabase();
Connection.prototype.get()
參數
key
«String»
Connection.prototype.getClient()
返回
- «MongoClient»
返回此連線用來與 MongoDB 通訊的 MongoDB 驅動程式 MongoClient
實例。
範例
const conn = await mongoose.createConnection('mongodb://127.0.0.1:27017/test').
asPromise();
conn.getClient(); // MongoClient { ... }
Connection.prototype.host
類型
- «屬性»
URI 的主機名稱部分。如果有多個主機,例如複本集,則此部分將包含 URI 中的第一個主機名稱
範例
mongoose.createConnection('mongodb://127.0.0.1:27017/mydb').host; // "127.0.0.1"
Connection.prototype.id
類型
- «屬性»
此連線的數字識別碼。當您有多個連線時,用於偵錯。
範例
// The default connection has `id = 0`
mongoose.connection.id; // 0
// If you create a new connection, Mongoose increments id
const conn = mongoose.createConnection();
conn.id; // 1
Connection.prototype.listCollections()
返回
- «Promise<Array[Collection]>»
MongoDB Node 驅動程式的 listCollections()
的輔助函式。返回集合物件的陣列。
Connection.prototype.listDatabases()
返回
- «Promise<[object Object]>»
MongoDB Node 驅動程式的 listDatabases()
的輔助函式。返回一個具有 databases
屬性的物件,該屬性包含資料庫物件的陣列。
範例
const { databases } = await mongoose.connection.listDatabases();
databases; // [{ name: 'mongoose_test', sizeOnDisk: 0, empty: false }]
Connection.prototype.model()
參數
name
«String|Function» 模型名稱或繼承 Model 的類別[schema]
«Schema» 一個綱要。定義模型時必須[collection]
«String» mongodb 集合的名稱 (可選),如果未給定,將從模型名稱推斷[options]
«Object»[options.overwriteModels=false]
«Boolean» 如果為 true,則覆寫具有相同名稱的現有模型,以避免OverwriteModelError
返回
- «Model» 編譯的模型
參見
定義或檢索模型。
const mongoose = require('mongoose');
const db = mongoose.createConnection(..);
db.model('Venue', new Schema(..));
const Ticket = db.model('Ticket', new Schema(..));
const Venue = db.model('Venue');
當未傳遞 collection
引數時,Mongoose 會將模型 name
傳遞給 utils.toCollectionName
方法,產生一個集合名稱。此方法會將名稱複數化。如果您不喜歡此行為,請傳遞集合名稱或設定綱要的集合名稱選項。
範例
const schema = new Schema({ name: String }, { collection: 'actor' });
// or
schema.set('collection', 'actor');
// or
const collectionName = 'actor'
const M = conn.model('Actor', schema, collectionName)
Connection.prototype.modelNames()
返回
- «Array[String]»
返回在此連線上建立的模型名稱的陣列。
Connection.prototype.models
類型
- «屬性»
一個 POJO,包含從模型名稱到模型的對應。包含已使用 Connection#model()
新增到此連線的所有模型。
範例
const conn = mongoose.createConnection();
const Test = conn.model('Test', mongoose.Schema({ name: String }));
Object.keys(conn.models).length; // 1
conn.models.Test === Test; // true
Connection.prototype.name
類型
- «屬性»
Connection.prototype.openUri()
參數
uri
«String» 要連線的 URI。[options]
«Object» 傳遞給MongoClient.connect
[options.bufferCommands=true]
«Boolean» Mongoose 特定選項。設定為 false 以在與此連線關聯的所有模型上停用緩衝。[options.bufferTimeoutMS=10000]
«Number» Mongoose 特定選項。如果bufferCommands
為 true,如果作業仍在緩衝中,Mongoose 將在bufferTimeoutMS
後擲回錯誤。[options.dbName]
«String» 我們要使用的資料庫名稱。如果未提供,請使用連線字串中的資料庫名稱。[options.user]
«String» 用於驗證的使用者名稱,等同於options.auth.user
。為了保持回溯相容性而維護。[options.pass]
«String» 用於驗證的密碼,等同於options.auth.password
。為了保持回溯相容性而維護。[options.maxPoolSize=100]
«Number» MongoDB 驅動程式將為此連線保持開啟的最大通訊端數量。請記住,MongoDB 一次只允許每個通訊端執行一個作業,因此如果您發現有一些慢速查詢阻礙了較快查詢的進行,您可能需要增加此值。請參閱 MongoDB 和 Node.js 中的慢速列車。[options.minPoolSize=0]
«Number» MongoDB 驅動程式將為此連線保持開啟的最小通訊端數量。請記住,MongoDB 一次只允許每個通訊端執行一個作業,因此如果您發現有一些慢速查詢阻礙了較快查詢的進行,您可能需要增加此值。請參閱 MongoDB 和 Node.js 中的慢速列車。[options.serverSelectionTimeoutMS]
«Number» 如果useUnifiedTopology = true
,MongoDB 驅動程式會嘗試尋找伺服器來傳送任何給定的作業,並在發生錯誤之前保持在serverSelectionTimeoutMS
毫秒內重試。如果未設定,MongoDB 驅動程式預設使用30000
(30 秒)。[options.heartbeatFrequencyMS]
«Number» 如果useUnifiedTopology = true
,MongoDB 驅動程式會每隔heartbeatFrequencyMS
發送一個心跳以檢查連線的狀態。心跳會受到serverSelectionTimeoutMS
的影響,因此 MongoDB 驅動程式預設會將失敗的心跳重試最多 30 秒。Mongoose 只會在心跳失敗後發出'disconnected'
事件,因此您可能需要降低此設定,以縮短伺服器關閉到 Mongoose 發出'disconnected'
事件之間的時間。我們建議您**不要**將此設定設定為低於 1000,過多的心跳可能會導致效能下降。[options.autoIndex=true]
«Boolean» Mongoose 特有的選項。設定為 false 可停用與此連線相關的所有模型的自動索引建立。[options.promiseLibrary]
«Class» 設定底層驅動程式的 Promise 程式庫。[options.socketTimeoutMS=0]
«Number» MongoDB 驅動程式在*初始連線後*,因閒置而終止 Socket 連線之前會等待的時間長度。Socket 閒置可能是因為沒有任何活動,或是長時間執行的操作。socketTimeoutMS
預設為 0,表示 Node.js 不會因為閒置而導致 Socket 超時。此選項會在 MongoDB 驅動程式成功完成後傳遞給Node.js 的socket#setTimeout()
函式。[options.family=0]
«Number» 透明地傳遞給Node.js 的dns.lookup()
函式。可以是0
、4
或6
。4
表示僅使用 IPv4,6
表示僅使用 IPv6,0
表示兩者都嘗試。[options.autoCreate=false]
«Boolean» 設定為true
可讓 Mongoose 自動對此連線上建立的每個模型呼叫createCollection()
。
使用 MongoClient.connect()
以 URI 開啟連線。
Connection.prototype.pass
類型
- «屬性»
Connection.prototype.plugin()
參數
fn
«Function» 外掛程式回呼函式[opts]
«Object» 選用的選項
返回
- «Connection» 此連線
參見
宣告一個外掛程式,該外掛程式會在您傳遞給 conn.model()
的所有 Schema 上執行
等同於對您建立的每個 Schema 呼叫 .plugin(fn)
。
範例
const db = mongoose.createConnection('mongodb://127.0.0.1:27017/mydb');
db.plugin(() => console.log('Applied'));
db.plugins.length; // 1
db.model('Test', new Schema({})); // Prints "Applied"
Connection.prototype.plugins
類型
- «屬性»
將套用至此連線上建立的所有模型的外掛程式。
範例
const db = mongoose.createConnection('mongodb://127.0.0.1:27017/mydb');
db.plugin(() => console.log('Applied'));
db.plugins.length; // 1
db.model('Test', new Schema({})); // Prints "Applied"
Connection.prototype.port
類型
- «屬性»
URI 的 Port 部分。如果有多個主機(例如副本集),則此處將包含 URI 中第一個主機名稱的 Port。
範例
mongoose.createConnection('mongodb://127.0.0.1:27017/mydb').port; // 27017
Connection.prototype.readyState
類型
- «屬性»
連線的就緒狀態
- 0 = 已斷線
- 1 = 已連線
- 2 = 連線中
- 3 = 斷線中
每個狀態變更都會發出其相關的事件名稱。
範例
conn.on('connected', callback);
conn.on('disconnected', callback);
Connection.prototype.removeDb()
參數
name
«String» 資料庫名稱
返回
- «Connection» 此連線
移除使用 useDb()
建立的具有指定名稱的資料庫連線。
如果找不到資料庫連線,則會擲回錯誤。
範例
// Connect to `initialdb` first
const conn = await mongoose.createConnection('mongodb://127.0.0.1:27017/initialdb').asPromise();
// Creates an un-cached connection to `mydb`
const db = conn.useDb('mydb');
// Closes `db`, and removes `db` from `conn.relatedDbs` and `conn.otherDbs`
await conn.removeDb('mydb');
Connection.prototype.set()
參數
key
«String»val
«Any»
設定選項 key
的值。等同於 conn.options[key] = val
支援的選項包括
maxTimeMS
:為此連線上的所有查詢設定maxTimeMS
。'debug'
:如果為true
,則將 Mongoose 傳送到 MongoDB 的操作列印到主控台。如果傳遞可寫入的資料流,則會將其記錄到該資料流,而不會進行著色。如果傳遞回呼函式,它將接收集合名稱、方法名稱,然後接收傳遞給該方法的所有引數。例如,如果您想要複製預設的記錄,則可以從回呼輸出Mongoose: ${collectionName}.${methodName}(${methodArgs.join(', ')})
。
範例
conn.set('test', 'foo');
conn.get('test'); // 'foo'
conn.options.test; // 'foo'
Connection.prototype.setClient()
參數
client
«MongClient» 要設定使用的 Client。
返回
- «Connection» 此連線
設定此連線用於與 MongoDB 通訊的 MongoDB 驅動程式 MongoClient
實例。如果您已經有 MongoClient 實例,並想要重複使用它,這會很有用。
範例
const client = await mongodb.MongoClient.connect('mongodb://127.0.0.1:27017/test');
const conn = mongoose.createConnection().setClient(client);
conn.getClient(); // MongoClient { ... }
conn.readyState; // 1, means 'CONNECTED'
Connection.prototype.startSession()
參數
[options]
«Object» 請參閱mongodb 驅動程式選項[options.causalConsistency=true]
«Boolean» 設定為 false 可停用因果一致性
返回
- «Promise<ClientSession>» 解析為 MongoDB 驅動程式
ClientSession
的 Promise
需要 MongoDB >= 3.6.0。啟動 MongoDB 會話,以獲得因果一致性、可重試的寫入和 交易等好處。
範例
const session = await conn.startSession();
let doc = await Person.findOne({ name: 'Ned Stark' }, null, { session });
await doc.remove();
// `doc` will always be null, even if reading from a replica set
// secondary. Without causal consistency, it is possible to
// get a doc back from the below query if the query reads from a
// secondary that is experiencing replication lag.
doc = await Person.findOne({ name: 'Ned Stark' }, null, { session, readPreference: 'secondary' });
Connection.prototype.syncIndexes()
參數
[options]
«Object»[options.continueOnError]
«Boolean» 預設為false
。如果設定為true
,則如果一個模型的同步失敗,Mongoose 不會擲回錯誤,並會傳回一個物件,其中鍵是模型的名稱,而值是每個模型的結果/錯誤。
返回
- «Promise<Object>» 傳回 Promise,當 Promise 解析時,值是已捨棄的索引清單。
同步在此連線上註冊的模型的全部索引。
Connection.prototype.transaction()
參數
fn
«Function» 在交易中執行的函式[options]
«[object Object]» 交易的選用設定
返回
- «Promise<Any>» 如果 Mongoose 成功提交交易,則會實現的 Promise;如果交易中止或 Mongoose 無法提交交易,則會拒絕的 Promise。如果實現,Promise 會解析為 MongoDB 命令結果。
需要 MongoDB >= 3.6.0。在交易中執行包裝的非同步函式。如果非同步函式成功執行,Mongoose 會提交交易,如果出現可重試的錯誤,則會嘗試重試。
呼叫 MongoDB 驅動程式的 session.withTransaction()
,但也處理重設 Mongoose 文件狀態,如下所示。
範例
const doc = new Person({ name: 'Will Riker' });
await db.transaction(async function setRank(session) {
doc.rank = 'Captain';
await doc.save({ session });
doc.isNew; // false
// Throw an error to abort the transaction
throw new Error('Oops!');
},{ readPreference: 'primary' }).catch(() => {});
// true, `transaction()` reset the document's state because the
// transaction was aborted.
doc.isNew;
Connection.prototype.useDb()
參數
name
«String» 資料庫名稱[options]
«Object»[options.useCache=false]
«Boolean» 如果為 true,則會快取結果,因此多次使用相同名稱呼叫useDb()
只會建立 1 個連線物件。[options.noListener=false]
«Boolean» 如果為 true,則連線物件不會讓資料庫偵聽原始連線上的事件。請參閱問題 #9961。
返回
- «Connection» 新的連線物件
使用相同的連線集區切換到不同的資料庫。
傳回具有新資料庫的新連線物件。
範例
// Connect to `initialdb` first
const conn = await mongoose.createConnection('mongodb://127.0.0.1:27017/initialdb').asPromise();
// Creates an un-cached connection to `mydb`
const db = conn.useDb('mydb');
// Creates a cached connection to `mydb2`. All calls to `conn.useDb('mydb2', { useCache: true })` will return the same
// connection instance as opposed to creating a new connection instance
const db2 = conn.useDb('mydb2', { useCache: true });
Connection.prototype.user
類型
- «屬性»
Connection.prototype.watch()
參數
[pipeline]
«Array»[options]
«Object» 不變地傳遞給MongoDB 驅動程式的Db#watch()
函式
返回
- «ChangeStream» Mongoose 特有的變更串流包裝器,繼承自 EventEmitter
監看整個基礎資料庫的變更。類似於Model.watch()
。
此函式不會觸發任何中介軟體。特別是,它不會觸發彙總中介軟體。
ChangeStream 物件是一個事件發射器,會發出下列事件
'change'
:發生變更,請參閱以下範例'error'
:發生無法復原的錯誤。特別是,如果變更串流與副本集的主要節點失去連線,目前變更串流會錯誤退出。追蹤 此 GitHub 問題 以取得更新資訊。'end'
:如果關閉基礎資料流,則會發出'close'
:如果關閉基礎資料流,則會發出
範例
const User = conn.model('User', new Schema({ name: String }));
const changeStream = conn.watch().on('change', data => console.log(data));
// Triggers a 'change' event on the change stream.
await User.create({ name: 'test' });
Connection.prototype.withSession()
參數
executor
«Function» 使用 1 個引數呼叫:ClientSession
實例
返回
- «Promise» 解析為執行器函式的傳回值
connection.client.withSession()
的便利包裝器。
範例
await conn.withSession(async session => {
const doc = await TestModel.findOne().session(session);
});