46个版本 (24个稳定版)

新增 5.1.0 2024年8月23日
4.4.2 2024年7月21日
4.4.1 2024年2月29日
4.4.0 2023年5月30日
0.4.2 2020年11月28日

#251 in 数据库接口

Download history 22/week @ 2024-05-01 35/week @ 2024-05-08 34/week @ 2024-05-15 55/week @ 2024-05-22 27/week @ 2024-05-29 30/week @ 2024-06-05 31/week @ 2024-06-12 42/week @ 2024-06-19 41/week @ 2024-06-26 9/week @ 2024-07-03 30/week @ 2024-07-10 133/week @ 2024-07-17 66/week @ 2024-07-24 33/week @ 2024-07-31 18/week @ 2024-08-07 190/week @ 2024-08-14

每月322次下载
4 crate 中使用

Apache-2.0

1MB
7.5K SLoC

PoloDB Core

简介

PoloDB 是一个用 Rust 编写的库,实现了轻量级的 MongoDB

手册

Github: PoloDB/PoloDB

网站: polodb.org


lib.rs:

PoloDB 是一个基于 JSON 的嵌入式数据库。

PoloDB 是一个用 Rust 编写的库,实现了轻量级的 MongoDB。PoloDB 没有依赖(除了 libc),因此可以在大多数平台上轻松运行(感谢 Rust 语言)。PoloDB 的数据存储在文件中。文件格式是稳定的、跨平台的且向后兼容。PoloDB 的 API 非常类似于 MongoDB。学习和使用都非常简单。

教程

用法

Database 结构提供了所有访问 DB 文件的 API。

打开本地文件

use polodb_core::Database;
let db = Database::open_path(db_path).unwrap();

示例

use polodb_core::{Database, CollectionT};
use serde::{Serialize, Deserialize};

#[derive(Debug, Serialize, Deserialize)]
struct Book {
   title: String,
   author: String,
}

let db = Database::open_path(db_path).unwrap();
let collection = db.collection("books");
collection.insert_one(Book {
   title: "The Three-Body Problem".to_string(),
   author: "Liu Cixin".to_string(),
}).unwrap();

将文档插入集合

use polodb_core::{Database, CollectionT};
use polodb_core::bson::{Document, doc};

let db = Database::open_path(db_path).unwrap();
let collection = db.collection::<Document>("books");

let docs = vec![
    doc! { "title": "1984", "author": "George Orwell" },
    doc! { "title": "Animal Farm", "author": "George Orwell" },
    doc! { "title": "The Great Gatsby", "author": "F. Scott Fitzgerald" },
];
collection.insert_many(docs).unwrap();

在集合中查找文档

use polodb_core::{Database, CollectionT};
use polodb_core::bson::{Document, doc};
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
struct Book {
   title: String,
   author: String,
}

let db = Database::open_path(db_path).unwrap();
let collection = db.collection::<Book>("books");

let docs = vec![
    Book { title: "1984".to_string(), author: "George Orwell".to_string() },
    Book { title: "Animal Farm".to_string(), author: "George Orwell".to_string() },
    Book { title: "The Great Gatsby".to_string(), author: "F. Scott Fitzgerald".to_string() },
];
collection.insert_many(docs).unwrap();

let books = collection.find(doc! {}).run().unwrap();
for book in books {
    println!("name: {:?}", book);
}

事务

一个 Transaction 是一系列作为单个单元执行的操作。

您可以通过 Database::start_transaction 方法手动启动事务。如果您没有手动启动,每次操作都会自动启动一个事务。

示例

use polodb_core::{Database, CollectionT};
use polodb_core::bson::{Document, doc};

let db = Database::open_path(db_path).unwrap();

let txn = db.start_transaction().unwrap();

let collection = txn.collection::<Document>("books");

let docs = vec![
    doc! { "title": "1984", "author": "George Orwell" },
    doc! { "title": "Animal Farm", "author": "George Orwell" },
    doc! { "title": "The Great Gatsby", "author": "F. Scott Fitzgerald" },
];
collection.insert_many(docs).unwrap();

txn.commit().unwrap();

依赖项

~31MB
~608K SLoC