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 数据库接口
每月322次下载
在 4 crate 中使用
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