连接
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 实例
继承
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
类型
- «属性»
URI 中指定的密码
示例
mongoose.createConnection('mongodb://val:[email protected]:27017/mydb').pass; // "psw"
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
类型
- «属性»
URI 中指定的用户名
示例
mongoose.createConnection('mongodb://val:[email protected]:27017/mydb').user; // "val"
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);
});