連線


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()

參數
返回
  • «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»

取得選項 key 的值。等同於 conn.options[key]

範例

conn.get('test'); // returns the 'test' value

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

類型
  • «屬性»

此連線指向的資料庫名稱。

範例

mongoose.createConnection('mongodb://127.0.0.1:27017/mydb').name; // "mydb"

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.socketTimeoutMS=0] «Number» MongoDB 驅動程式在*初始連線後*,因閒置而終止 Socket 連線之前會等待的時間長度。Socket 閒置可能是因為沒有任何活動,或是長時間執行的操作。socketTimeoutMS 預設為 0,表示 Node.js 不會因為閒置而導致 Socket 超時。此選項會在 MongoDB 驅動程式成功完成後傳遞給Node.js 的 socket#setTimeout() 函式

    • [options.family=0] «Number» 透明地傳遞給Node.js 的 dns.lookup() 函式。可以是 0464 表示僅使用 IPv4,6 表示僅使用 IPv6,0 表示兩者都嘗試。

    • [options.autoCreate=false] «Boolean» 設定為 true 可讓 Mongoose 自動對此連線上建立的每個模型呼叫 createCollection()

使用 MongoClient.connect() 以 URI 開啟連線。


Connection.prototype.pass

類型
  • «屬性»

URI 中指定的密碼

範例

mongoose.createConnection('mongodb://val:psw@127.0.0.1:27017/mydb').pass; // "psw"

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

類型
  • «屬性»

URI 中指定的使用者名稱

範例

mongoose.createConnection('mongodb://val:psw@127.0.0.1:27017/mydb').user; // "val"

Connection.prototype.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);
});