Crate polodb_core
source ·Expand description
PoloDB is an embedded JSON-based database.
PoloDB is a library written in Rust that implements a lightweight MongoDB. PoloDB has no dependency(except for libc), so it can be easily run on most platform(thanks for Rust Language). The data of PoloDB is stored in a file. The file format is stable, cross-platform, and backwards compaitible. The API of PoloDB is very similar to MongoDB. It’s very easy to learn and use.
§Usage
The Database
structure provides all the API to get access to the DB file.
§Open a local file
use polodb_core::Database;
let db = Database::open_file(db_path).unwrap();
§Open a memory database
use polodb_core::Database;
let db = Database::open_memory().unwrap();
§Example
use polodb_core::Database;
use serde::{Serialize, Deserialize};
#[derive(Debug, Serialize, Deserialize)]
struct Book {
title: String,
author: String,
}
let db = Database::open_file(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();
§Inserting documents into a collection
use polodb_core::Database;
use polodb_core::bson::{Document, doc};
let db = Database::open_memory().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();
§Finding documents in a collection
use polodb_core::Database;
use polodb_core::bson::{Document, doc};
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
struct Book {
title: String,
author: String,
}
let db = Database::open_memory().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(None).unwrap();
for book in books {
println!("name: {:?}", book);
}
§Session
A ClientSession
represents a logical session used for ordering sequential
operations.
You an manually start a transaction by ClientSession::start_transaction
method.
If you don’t start it manually, a transaction will be automatically started
in your every operation.
§Example
use polodb_core::Database;
use polodb_core::bson::{Document, doc};
let db = Database::open_file(db_path).unwrap();
let mut session = db.start_session().unwrap();
session.start_transaction(None).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_with_session(docs, &mut session).unwrap();
session.commit_transaction().unwrap();
Re-exports§
Modules§
Macros§
Structs§
- A
ClientCursor
is used get the result of a query. You can move the cursor forward using theadvance()
. - A PoloDB client session. This struct represents a logical session used for ordering sequential operations. To create a
ClientSession
, callstart_session
on aDatabase
. - A
ClientSessionCursor
is used get the result of a query. - A wrapper of collection in struct.
- Config builder for the database
- API wrapper for Rust-level