Cozo NodeJS 库

cozo-node

NodeJS 的嵌入式 CozoDB 库。

本文叙述的是如何安装设置库本身。有关如何使用 CozoDB(CozoScript)的信息,见 文档

安装

npm install --save cozo-node

安装过程中需要从 GitHub 发布页 下载二进制文件。如果因为网络问题失败,可以使用此 镜像 ,使用方法为

npm install --save cozo-node --cozo_node_prebuilt_binary_host_mirror=https://gitee.com/cozodb/cozo-lib-nodejs/releases/download/

注意:如果你用的是 Yarn 而不是 NPM,类似的命令 可能不奏效

如果你的操作系统、平台不是常见的平台,可能会报错说找不到预编译库。这种情况下可以参见后面关于如何从源码编译的内容。

用法

const {CozoDb} = require('cozo-node')

const db = new CozoDb()

function printQuery(query, params) {
    db.run(query, params)
        .then(data => console.log(data))
        .catch(err => console.error(err.display || err.message))
}

printQuery("?[] <- 'hello', 'world!'")
printQuery("?[] <- 'hello', 'world', $name", {"name": "JavaScript"})
printQuery("?[a] <- 1, 2")

基本 API

class CozoDb {
    /**
     * 构造函数
     * 
     * @param engine:  默认为 'mem',即纯内存的非持久化存储。其他值可以是 'sqlite'、'rocksdb' 等
     * @param path:    存储文件或文件夹的路径,默认为 'data.db'。在 'mem' 引擎下无用。
     * @param options: 默认为 {},在 NodeJS 支持的引擎中无用。
     */
    constructor(engine: string, path: string, options: object): CozoDb;

    /**
     * 关闭数据库,并释放其原生资源。如果不调用此方法而直接删除数据库的变量,则会造成原生资源泄漏。
     */
    close(): void;

    /**
     * 执行查询文本
     * 
     * @param script: 查询文本
     * @param params: 传入的参数,默认为 {}
     */
    async run(script: string, params: object): object;

    /**
     * 导出存储表
     * 
     * @param relations:  需要导出的存储表名称
     */
    async exportRelations(relations: Array<string>): object;

    /**
     * 导入数据至存储表
     * 
     * 注意:以此方法导入数据不会激活存储表上任何的触发器。
     * 
     * @param data: 导入的表以及数据,格式与 `exportRelations` 返回的相同
     */
    async importRelations(data: object): object;

    /**
     * 备份数据库
     * 
     * @param path: 备份文件路径
     */
    async backup(path: string): object;

    /**
     * 从备份文件恢复数据至当前数据库。若当前数据库非空,则报错。
     * 
     * @param path: 备份文件路径
     */
    async restore(path: string): object;

    /**
     * 将备份文件中指定存储表里的数据插入当前数据库中同名表里。
     *
     * 注意:以此方法导入数据不会激活存储表上任何的触发器。
     *
     * @param path: 备份文件路径
     * @param rels: 需导入数据的表名
     */
    async importRelationsFromBackup(path: string, rels: Array<string>): object;
}

更多信息 见此

进阶 API

Cozo 支持多语句事务、存储表更新时回调以及使用 NodeJS 实现自定义固定规则,与 Python 库国内镜像)所支持的差不多。可参考此 示例

编译

编译 cozo-node 需要 Rust 工具链。运行

cargo build --release -p cozo-node -F compact -F storage-rocksdb

完成后,动态链接库可以在 ../target/ 文件夹中找到(具体文件名根据平台与操作系统会有差异,一般来说 Linux 上 扩展名为 .so,Mac 上为 .dylib,Windows 上为 .dll)。 将找到的动态库拷贝为此目录下的 native/6/cozo_node_prebuilt.node 文件(中间目录若不存在,则需建立)。

如果一切操作正确,在此目录下执行下列命令则会正常返回:

node example.js

Homonyms

neural/inf/rs/cozo/README-zh
Logo [![docs](https://img.shields.io/readthedocs/cozo/latest)](https://docs.cozodb.org/zh_CN/latest/) [![cozo-node](https://img.shields.io/npm/v/cozo-node)](https://www.npmjs.com/package/cozo-node) [![npm…
neural/inf/rs/cozo/cozo-lib-wasm/README-zh
Cozo WASM 库(浏览器) 可以在浏览器中运行的 Cozo WASM 库。NodeJS 用户请使用 [原生库](/neural/inf/rs/cozo/cozo-lib-nodejs) :速度更快,功能也更多。 本文叙述的是如何安装设置库本身。有关如何使用 CozoDB(CozoScript)的信息,见 [文档](https://docs.cozodb.org/zh_CN/latest/index.html) 。 安装 你也可以直接从 [发布页面](https://github.com/cozodb/cozo/releases) 下载…
neural/inf/rs/cozo/cozo-bin/README-zh
Cozo(独立程序) [![server](https://img.shields.io/github/v/release/cozodb/cozo)](https://github.com/cozodb/cozo/releases) 本文叙述的是如何安装设置 Cozo 的独立程序本身。有关如何使用 CozoDB(CozoScript)的信息,见 [文档](https://docs.cozodb.org/zh_CN/latest/index.html) 。 下载 独立服务的程序可以从 [GitHub 发布页](https://github.com/cozodb/cozo/releases) 或…
neural/inf/rs/cozo/cozo-lib-python/README-zh
Cozo Python 库 [![pypi](https://img.shields.io/pypi/v/cozo_embedded)](https://pypi.org/project/cozo_embedded/) [CozoDB](https://www.cozodb.org) 的 Python 嵌入式库 `cozo_embedded` 的源代码。 一般来说你应该使用 [PyCozo](https://github.com/cozodb/pycozo) 库( [Gitee 镜像](https://gitee.com/cozodb/pycozo) ),而不是直接使用此库。…
neural/inf/rs/cozo/cozorocks/README-zh
Cozorocks 对 RocksDB C++ 接口的封装。
neural/inf/rs/cozo/cozo-lib-swift/README-zh
Cozo Swift 库(仅支持苹果硬件) [![pod](https://img.shields.io/cocoapods/v/CozoSwiftBridge)](https://github.com/cozodb/cozo/tree/main/cozo-lib-swift) 本文叙述的是如何安装设置库本身。有关如何使用 CozoDB(CozoScript)的信息,见 [文档](https://docs.cozodb.org/zh_CN/latest/index.html) 。 本库可在 macOS(苹果 ARM 或 Intel 芯片)以及 iOS(iPad、iPhone、模拟器)中使用。…
neural/inf/rs/cozo/cozo-lib-java/README-zh
Cozo Java 语言库 这里是 Cozo 的 JNI 接口库,可以在 Java/JVM 语言/安卓中使用。 一般情况下,这个库不是直接使用的。用于应当使用以下调用此库的库: [Cozo Java](https://github.com/cozodb/cozo-lib-java) ([镜像](https://gitee.com/cozodb/cozo-lib-java)):在 JVM Java 中使用 [Cozo Clojure](https://github.com/cozodb/cozo-clj) ([镜像](https://gitee.com/cozodb/cozo-clj)):在…
neural/inf/rs/cozo/cozo-core/README-zh
Cozo-core [![Crates.io](https://img.shields.io/crates/v/cozo)](https://crates.io/crates/cozo) Cozo 数据库核心部分的实现。
neural/inf/rs/cozo/cozo-lib-c/README-zh
Cozo C 语言库 [![C](https://img.shields.io/github/v/release/cozodb/cozo)](https://github.com/cozodb/cozo/releases) 这里是 Cozo 的 C API 的源代码。 本文叙述的是如何安装设置 Cozo 的 C 语言库。有关如何使用 CozoDB(CozoScript)的信息,见 [文档](https://docs.cozodb.org/zh_CN/latest/index.html) 。 预编译的库可从 [GitHub…

Graph