连接
Connection()Connection.prototype.asPromise()Connection.prototype.clientConnection.prototype.close()Connection.prototype.collection()Connection.prototype.collectionsConnection.prototype.configConnection.prototype.createCollection()Connection.prototype.createCollections()Connection.prototype.dbConnection.prototype.deleteModel()Connection.prototype.destroy()Connection.prototype.dropCollection()Connection.prototype.dropDatabase()Connection.prototype.get()Connection.prototype.getClient()Connection.prototype.hostConnection.prototype.idConnection.prototype.listCollections()Connection.prototype.listDatabases()Connection.prototype.model()Connection.prototype.modelNames()Connection.prototype.modelsConnection.prototype.nameConnection.prototype.openUri()Connection.prototype.passConnection.prototype.plugin()Connection.prototype.pluginsConnection.prototype.portConnection.prototype.readyStateConnection.prototype.removeDb()Connection.prototype.set()Connection.prototype.setClient()Connection.prototype.startSession()Connection.prototype.syncIndexes()Connection.prototype.transaction()Connection.prototype.useDb()Connection.prototype.userConnection.prototype.watch()Connection.prototype.withSession()
Connection()
参数
base«Mongoose» 一个 Mongoose 实例
继承
Connection 构造函数
出于实际原因,连接等于 Db。
Connection.prototype.asPromise()
返回值
- «Promise»
返回一个 promise,当此连接成功连接到 MongoDB 时解析,或者如果此连接连接失败则拒绝。
示例
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 驱动程序集合) 的一个薄包装器。使用集合绕过 Mongoose 中间件、验证和转换,允许您直接使用 MongoDB Node.js 驱动程序 功能。
Connection.prototype.collections
类型
- «属性»
与此连接关联的集合的哈希值
Connection.prototype.config
类型
- «属性»
与此连接关联的全局选项的哈希值
Connection.prototype.createCollection()
参数
collection«string» 要创建的集合[options]«Object» 参见 MongoDB 驱动程序文档
返回值
- «Promise»
createCollection() 的助手。将使用指定的选项显式创建给定的集合。用于从 mongoose 创建 固定大小集合 和 视图。
选项将不经修改传递给 MongoDB 驱动程序的 createCollection() 函数
Connection.prototype.createCollections()
参数
continueOnError«Boolean» 为 true 时,将继续创建集合并为出错的集合创建一个新的错误类。
按顺序对模型调用 createCollection()。
Connection.prototype.db
类型
- «属性»
mongodb.Db 实例,在连接打开时设置
Connection.prototype.deleteModel()
参数
name«String|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 驱动程序在由于 初始连接后 的非活动而终止套接字之前等待多长时间。套接字可能由于没有活动或长时间运行的操作而处于非活动状态。socketTimeoutMS默认值为 0,这意味着 Node.js 不会由于非活动而超时套接字。此选项在 MongoDB 驱动程序成功完成之后传递给 Node.jssocket#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() 的所有模式上执行的插件
等效于在您创建的每个模式上调用.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 的端口部分。如果有多个主机,例如副本集,则将包含 URI 中第一个主机名的端口。
示例
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» 要设置使用的客户端。
返回值
- «Connection» 本身
设置MongoDB 驱动程序 MongoClient 实例,此连接使用该实例与 MongoDB 交谈。如果您已经拥有 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的承诺
需要 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>» 返回一个承诺,当承诺解析时,值为已删除索引的列表。
同步与此连接注册的所有模型的索引。
Connection.prototype.transaction()
参数
fn«Function» 在事务中执行的函数[options]«[object Object]» 事务的可选设置
返回值
- «Promise<Any>» 如果 Mongoose 成功提交了事务,则承诺将被实现,或者如果事务被中止或 Mongoose 无法提交事务,则承诺将被拒绝。如果已实现,则承诺将解析为 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()仅创建一个连接对象。[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);
}); 
