#mongodb #mongo #oplog

oplog

Library for iterating over a MongoDB replica set oplog

3 releases (breaking)

Uses old Rust 2015

0.3.0 Feb 20, 2018
0.2.0 Jan 7, 2017
0.1.0 Jan 1, 2017

#693 in Database interfaces

MIT license

27KB
468 lines

Oplog Build Status

A Rust library for iterating over a MongoDB replica set oplog.

Current version: 0.3.0
Supported Rust versions: 1.14

Install

Install Oplog by adding the following to your Cargo.toml:

oplog = "0.3.0"

Usage

#[macro_use]
extern crate bson;
extern crate mongodb;
extern crate oplog;

use mongodb::{Client, ThreadedClient};
use oplog::{Operation, Oplog, OplogBuilder};

fn main() {
    let client = Client::connect("localhost", 27017).expect("Failed to connect to MongoDB.");

    if let Ok(oplog) = Oplog::new(&client) {
        for operation in oplog {
            match operation {
                Operation::Noop { timestamp, .. } => println!("No-op at {}", timestamp),
                Operation::Insert { timestamp, .. } => println!("Insert at {}", timestamp),
                Operation::Update { timestamp, .. } => println!("Update at {}", timestamp),
                Operation::Delete { timestamp, .. } => println!("Delete at {}", timestamp),
                Operation::Command { timestamp, .. } => println!("Command at {}", timestamp),
                Operation::ApplyOps { timestamp, .. } => println!("ApplyOps at {}", timestamp),
            }
        }
    }

    // Or, if you want to filter out certain operations:

    if let Ok(oplog) = OplogBuilder::new(&client).filter(Some(doc! { "op" => "i" })).build() {
        for insert in oplog {
            println!("{}", insert);
        }
    }
}

Documentation

Full API documentation is available at http://mudge.name/oplog

References

And many thanks to Ryman for his help along the way.

License

Copyright © 2016-2018 Paul Mucur.

Distributed under the MIT License.

Dependencies

~12MB
~235K SLoC