@ apostrophicems/ db- 连接
@apostrophecms/db-connect 定义数据库连接 API ApostropheCMS 磁带控制系统它为MongoDB、PostgreSQL和SQLite提供适配器,包括: apos-db-dump 财务报告和审定财务报表 apos-db-restore 用于数据库迁移和备份的命令行工具.
Db-连接的API与蒙戈DB API的一个大子集相兼容. 然而,在这份介绍性说明之后,本文件将介绍: db 连接 API 以自己的条件。 对于需要跨越所有三个数据库的项目,只需使用此处定义的功能即可.
支持的连接 URL
蒙戈DB
mongodb://localhost:27017/mydb
mongodb+srv://user:[email protected]/mydb
标准MongoDB连接字符串. MongoDB适配器是围绕已存在的驱动器的薄薄包装.
邮递SQL
postgres://localhost:5432/mydb
单一数据库模式。 所有收藏作为表格存放于 public 计划.
SQL 点
sqlite:///path/to/database.db
使用基于文件的 SQLite 数据库 better-sqlite3。父目录是
如果不存在,则创建.
与其它不同的是,这其实不是一个 URL: 之后的一切 sqlite:// 是一个
文件系统路径, 完全按照写入这一点很重要,因为
文件系统路径不是 URL —— 它们不是% 编码的, 可能包含
字符 一个 URL 解析器处理为重要,在 Windows 上,它们以
驱动一个 URL 解析器读作 host:port。所以不要用% 编码
路径。 一个空间是空间 :
sqlite:///Users/jane/My Project/data/site.db
%20 这里表示一个字面百分比,2,0,而不是一个空间。 绝对和
相对路径工作,在Windows上,两个分隔符都这样做:
sqlite:///var/lib/mysite/data.db absolute (POSIX)
sqlite://data/site.db relative to the working directory
sqlite://C:\Users\jane\site\data\site.db absolute (Windows)
sqlite://C:/Users/jane/site/data/site.db absolute (Windows, forward slashes)
sqlite:///C:/Users/jane/site/data/site.db absolute (Windows, file:// spelling)
内存数据库sqlite://:memory:)不支持——适配器
假设一个适合托管 ApostropeCMS 站点的持久商店.
多站点(多站点)
multipostgres://localhost:5432/shareddb-tenant1
设计用于AposropeCMS 多站点 模块。 在这个模式下,每个站点在一个单一的物理数据库内获得自己的PostgreSQL schema.
URL 路径在 最后一个连字符数字 :
- 最后一个连字符之前的每件事都是真实的 PostgreSQL 数据库名称(
shareddb(中文(简体) ) - 之后的一切都是计划名称
tenant1(中文(简体) )
每个方案在第一次使用时自动创建,在数据库被丢弃时被清理掉。 这提供了真正的多租户隔离——没有跨租户数据泄露——同时高效共享一个PostgreSQL实例.
连接中
const connect = require('@apostrophecms/db-connect');
const client = await connect('postgres://localhost:5432/mydb');
const db = client.db();
const articles = db.collection('articles');
// Insert a document
const result = await articles.insertOne({ title: 'Hello', status: 'draft' });
// Query documents
const docs = await articles.find({ status: 'draft' })
.sort({ title: 1 })
.limit(10)
.toArray();
// Update a document
await articles.updateOne(
{ _id: result.insertedId },
{ $set: { status: 'published' } }
);
await client.close();
connect(uri) 返回客户端。 打电话 client.db() 获取数据库,然后 db.collection(name) 获取收藏.
原子
insertOne 财务报告和审定财务报表 deleteOne 永远是原子.
updateOne 无 upsert 当原子只使用下列运算符时:
$set, (中文(简体) ),$inc, (中文(简体) ),$unset, (中文(简体) ),$currentDate-- 总是原子$push, (中文(简体) ),$pull, (中文(简体) ),$addToSet- 当所有值都是原子时 分级 (弦,数字,布尔斯). 对象或数组值返回到读-修改-写入.
这些运算符可以自由组合成一个 updateOne 和整个更新将是原子。 这涵盖了最常见的模式:计数器,状态旗,时间戳,字段清理,以及向/从数组中添加/删除项目.
以下操作不能保证为原子 并使用读取-修改-写入模式(文档被读取,更新在JavaScript中被应用,结果被回写) :
updateOne与$rename或者说upsert: trueupdateOne与$push, (中文(简体) ),$pull,或$addToSet使用 非薪级 数值updateMany, (中文(简体) ),findOneAndUpdate,以及replaceOne
对于必须具有原子性质且以上未涵盖的操作,使用咨询锁定(apos.lock) 串行访问。 Aposrophe核心已经使用咨询锁定原子关系(例如, apos.lock.lock (见e/cn.4/sub.2/2000/l.31,附件).