• Stars
    star
    1,268
  • Rank 37,109 (Top 0.8 %)
  • Language
    Rust
  • License
    Apache License 2.0
  • Created over 5 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

The official MongoDB Rust Driver

MongoDB Rust Driver

Crates.io docs.rs License

This is the officially supported MongoDB Rust driver, a client side library that can be used to interact with MongoDB deployments in Rust applications. It uses the bson crate for BSON support. The driver contains a fully async API that requires tokio. The driver also has a sync API that may be enabled via feature flags.

For more details, including features, runnable examples, troubleshooting resources, and more, please see the official documentation.

Installation

Requirements

  • Rust 1.64+ (See the MSRV policy for more information)
  • MongoDB 3.6+

Supported Platforms

The driver tests against Linux, MacOS, and Windows in CI.

Importing

The driver is available on crates.io. To use the driver in your application, simply add it to your project's Cargo.toml.

[dependencies]
mongodb = "2.8.0"

Version 1 of this crate has reached end of life and will no longer be receiving any updates or bug fixes, so all users are recommended to always depend on the latest 2.x release. See the 2.0.0 release notes for migration information if upgrading from a 1.x version.

Enabling the sync API

The driver also provides a blocking sync API. To enable this, add the "sync" feature to your Cargo.toml:

[dependencies.mongodb]
version = "2.8.0"
features = ["sync"]

Note: The sync-specific types can be imported from mongodb::sync (e.g. mongodb::sync::Client).

All Feature Flags

Feature Description
dns-resolver Enable DNS resolution to allow mongodb+srv URI handling. Enabled by default.
rustls-tls Use rustls for TLS connection handling. Enabled by default.
openssl-tls Use openssl for TLS connection handling.
sync Expose the synchronous API (mongodb::sync).
aws-auth Enable support for the MONGODB-AWS authentication mechanism.
zlib-compression Enable support for compressing messages with zlib
zstd-compression Enable support for compressing messages with zstd.
snappy-compression Enable support for compressing messages with snappy
in-use-encryption-unstable Enable support for client-side field level encryption and queryable encryption. This API is unstable and may be subject to breaking changes in minor releases.
tracing-unstable Enable support for emitting tracing events. This API is unstable and may be subject to breaking changes in minor releases.

Web Framework Examples

Actix

The driver can be used easily with the Actix web framework by storing a Client in Actix application data. A full example application for using MongoDB with Actix can be found here.

Rocket

The Rocket web framework provides built-in support for MongoDB via the Rust driver. The documentation for the rocket_db_pools crate contains instructions for using MongoDB with your Rocket application.

Note on connecting to Atlas deployments

In order to connect to a pre-4.2 Atlas instance that's M2 or bigger, the openssl-tls feature flag must be enabled. The flag is not required for clusters smaller than M2 or running server versions 4.2 or newer.

Windows DNS note

On Windows, there is a known issue in the trust-dns-resolver crate, which the driver uses to perform DNS lookups, that causes severe performance degradation in resolvers that use the system configuration. Since the driver uses the system configuration by default, users are recommended to specify an alternate resolver configuration on Windows (e.g. ResolverConfig::cloudflare()) until that issue is resolved. This only has an effect when connecting to deployments using a mongodb+srv connection string.

Warning about timeouts / cancellation

In async Rust, it is common to implement cancellation and timeouts by dropping a future after a certain period of time instead of polling it to completion. This is how tokio::time::timeout works, for example. However, doing this with futures returned by the driver can leave the driver's internals in an inconsistent state, which may lead to unpredictable or incorrect behavior (see RUST-937 for more details). As such, it is highly recommended to poll all futures returned from the driver to completion. In order to still use timeout mechanisms like tokio::time::timeout with the driver, one option is to spawn tasks and time out on their JoinHandle futures instead of on the driver's futures directly. This will ensure the driver's futures will always be completely polled while also allowing the application to continue in the event of a timeout.

Bug Reporting / Feature Requests

To file a bug report or submit a feature request, please open a ticket on our Jira project:

  • Create an account and login at jira.mongodb.org
  • Navigate to the RUST project at jira.mongodb.org/browse/RUST
  • Click Create Issue - If the ticket you are filing is a bug report, please include as much detail as possible about the issue and how to reproduce it.

Before filing a ticket, please use the search functionality of Jira to see if a similar issue has already been filed.

Contributing

We encourage and would happily accept contributions in the form of GitHub pull requests. Before opening one, be sure to run the tests locally; check out the testing section for information on how to do that. Once you open a pull request, your branch will be run against the same testing matrix that we use for our continuous integration system, so it is usually sufficient to only run the integration tests locally against a standalone. Remember to always run the linter tests before opening a pull request.

Running the tests

Integration and unit tests

In order to run the tests (which are mostly integration tests), you must have access to a MongoDB deployment. You may specify a MongoDB connection string in the MONGODB_URI environment variable, and the tests will use it to connect to the deployment. If MONGODB_URI is unset, the tests will attempt to connect to a local deployment on port 27017.

Note: The integration tests will clear out the databases/collections they need to use, but they do not clean up after themselves.

To actually run the tests, you can use cargo like you would in any other crate:

cargo test --verbose # runs against localhost:27017
export MONGODB_URI="mongodb://localhost:123"
cargo test --verbose # runs against localhost:123

Auth tests

The authentication tests will only be included in the test run if certain requirements are met:

  • The deployment must have --auth enabled
  • Credentials must be specified in MONGODB_URI
  • The credentials specified in MONGODB_URI must be valid and have root privileges on the deployment
export MONGODB_URI="mongodb://user:pass@localhost:27017"
cargo test --verbose # auth tests included

Topology-specific tests

Certain tests will only be run against certain topologies. To ensure that the entire test suite is run, make sure to run the tests separately against standalone, replicated, and sharded deployments.

export MONGODB_URI="mongodb://my-standalone-host:27017" # mongod running on 27017
cargo test --verbose
export MONGODB_URI="mongodb://localhost:27018,localhost:27019,localhost:27020/?replicaSet=repl" # replicaset running on ports 27018, 27019, 27020 with name repl
cargo test --verbose
export MONGODB_URI="mongodb://localhost:27021" # mongos running on 27021
cargo test --verbose

Run the tests with TLS/SSL

To run the tests with TLS/SSL enabled, you must enable it on the deployment and in MONGODB_URI.

export MONGODB_URI="mongodb://localhost:27017/?tls=true&tlsCertificateKeyFile=cert.pem&tlsCAFile=ca.pem"
cargo test --verbose

Note: When you open a pull request, your code will be run against a comprehensive testing matrix, so it is usually not necessary to run the integration tests against all combinations of topology/auth/TLS locally.

Linter Tests

Our linter tests use the nightly version of rustfmt to verify that the source is formatted properly and the stable version of clippy to statically detect any common mistakes. You can use rustup to install them both:

rustup component add clippy --toolchain stable
rustup component add rustfmt --toolchain nightly

Our linter tests also use rustdoc to verify that all necessary documentation is present and properly formatted. rustdoc is included in the standard Rust distribution.

To run the linter tests, run the check-clippy.sh, check-rustfmt.sh, and check-rustdoc.sh scripts in the .evergreen directory. To run all three, use the check-all.sh script.

bash .evergreen/check-all.sh

Continuous Integration

Commits to main are run automatically on evergreen.

Minimum supported Rust version (MSRV) policy

The MSRV for this crate is currently 1.64.0. This will rarely be increased, and if it ever is, it will only happen in a minor or major version release.

License

This project is licensed under the Apache License 2.0.

This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/).

More Repositories

1

mongo

The MongoDB Database
C++
26,192
star
2

node-mongodb-native

The official MongoDB Node.js driver
TypeScript
10,030
star
3

mongo-go-driver

The Official Golang driver for MongoDB
Go
8,135
star
4

laravel-mongodb

A MongoDB based Eloquent model and Query builder for Laravel (Moloquent)
PHP
6,997
star
5

mongo-python-driver

PyMongo - the Official MongoDB Python driver
Python
4,129
star
6

mongoid

The Official Ruby Object Mapper for MongoDB
Ruby
3,922
star
7

mongo-csharp-driver

The Official C# .NET Driver for MongoDB
C#
3,038
star
8

mongo-java-driver

The official MongoDB drivers for Java, Kotlin, and Scala
Java
2,568
star
9

motor

Motor - the async Python driver for MongoDB and Tornado or asyncio
Python
2,410
star
10

mongo-php-library

The Official MongoDB PHP library
PHP
1,594
star
11

mongo-hadoop

MongoDB Connector for Hadoop
Java
1,519
star
12

mongo-ruby-driver

The Official MongoDB Ruby Driver
Ruby
1,422
star
13

mongodb-kubernetes-operator

MongoDB Community Kubernetes Operator
Go
1,218
star
14

js-bson

BSON Parser for node and browser
TypeScript
1,130
star
15

mongo-php-driver-legacy

Legacy MongoDB PHP driver
PHP
1,093
star
16

mongo-cxx-driver

C++ Driver for MongoDB
C++
1,040
star
17

mongo-tools

Go
994
star
18

homebrew-brew

The Official MongoDB Software Homebrew Tap
Ruby
924
star
19

mongo-php-driver

The Official MongoDB PHP driver
PHP
838
star
20

mongo-c-driver

The Official MongoDB driver for C language
C
815
star
21

docs

The MongoDB Documentation Project Source.
Java
738
star
22

mongo-spark

The MongoDB Spark Connector
Java
706
star
23

casbah

Casbah is now officially end-of-life (EOL).
Scala
514
star
24

bson-rust

Encoding and decoding support for BSON in Rust
Rust
402
star
25

specifications

Specifications related to MongoDB
Python
383
star
26

mongo-snippets

snippets of code that might be useful for your mongodb deployment
C++
381
star
27

cookbook

MongoDB recipes.
Ruby
354
star
28

pymodm

A Pythonic, object-oriented interface for working with MongoDB.
Python
351
star
29

mongo-perf

performance tools for mongodb
JavaScript
350
star
30

libbson

ARCHIVED - libbson has moved to https://github.com/mongodb/mongo-c-driver/tree/master/src/libbson
C
347
star
31

mongo-kafka

MongoDB Kafka Connector
Java
342
star
32

mongo-efcore-provider

MongoDB Entity Framework Core Provider
C#
329
star
33

mongo-swift-driver

The official MongoDB driver for Swift
Swift
325
star
34

mongodb-enterprise-kubernetes

MongoDB Enterprise Kubernetes Operator
Dockerfile
325
star
35

mongo-scala-driver

Scala
286
star
36

terraform-provider-mongodbatlas

Terraform MongoDB Atlas Provider: Deploy, update, and manage MongoDB Atlas infrastructure as code through HashiCorp Terraform
Go
242
star
37

leafygreen-ui

LeafyGreen UI – LeafyGreen's React UI Kit
TypeScript
219
star
38

mongodb-atlas-cli

MongoDB Atlas CLI and MongoDB CLI enable you to manage your MongoDB in the Cloud
Go
161
star
39

mongodb-atlas-kubernetes

MongoDB Atlas Kubernetes Operator - Manage your MongoDB Atlas clusters from Kubernetes
Go
148
star
40

stitch-examples

MongoDB Stitch Examples
Java
138
star
41

chatbot

MongoDB Chatbot Framework. Powered by MongoDB and Atlas Vector Search.
TypeScript
135
star
42

support-tools

For support tools to be shared publicly
Go
127
star
43

stitch-js-sdk

MongoDB Stitch JavaScript SDK
TypeScript
113
star
44

mongo-bi-connector-odbc-driver

ODBC driver for MongoDB Connector for Business Intelligence
C
110
star
45

mongo-azure

C#
103
star
46

amboy

Amboy -- A Go(lang) Job Queue Tool
Go
98
star
47

helm-charts

Smarty
94
star
48

libmongocrypt

Required C library for Client Side and Queryable Encryption in MongoDB
C
94
star
49

bsonspec.org

site for bsonspec.org
HTML
92
star
50

terraform-aws-ecs-task-definition

A Terraform module for creating Amazon ECS Task Definitions
HCL
85
star
51

go-client-mongodb-atlas

Go Client for MongoDB Atlas
Go
79
star
52

docs-ecosystem

MongoDB Ecosystem Documentation
Python
77
star
53

bson-ruby

Ruby Implementation of the BSON Specification (2.0.0+)
Ruby
77
star
54

mongo-java-driver-reactivestreams

The Java Reactive Stream driver for MongoDB
Java
73
star
55

mongodbatlas-cloudformation-resources

MongoDB Atlas CloudFormation Resources: Deploy, update, and manage MongoDB Atlas infrastructure as code through AWS CloudFormation
Go
59
star
56

stitch-android-sdk

MongoDB Stitch Android SDK
Java
57
star
57

genny

🧞‍♀️ Grants 3 wishes. As long as those wishes are to generate load 🧞‍♂️
C++
49
star
58

winkerberos

A native Kerberos client implementation for Python on Windows
C
47
star
59

docs-realm

Realm Database SDK documentation
Kotlin
44
star
60

bson-numpy

This project has been superseded by PyMongoArrow - https://github.com/mongodb-labs/mongo-arrow/tree/main/bindings/python
C
43
star
61

stitch-ios-sdk

Swift
42
star
62

docs-tools

Common tools and content for MongoDB documentation projects.
Python
42
star
63

swift-bson

pure Swift BSON library
Swift
41
star
64

signal-processing-algorithms

Python
41
star
65

mongo-jdbc-driver

JDBC Driver for MongoDB Atlas SQL interface
Java
38
star
66

design

Source code for MongoDB.design, LeafyGreen's official documentation site.
TypeScript
36
star
67

mongo-hhvm-driver

MongoDB HHVM driver **Note, this driver is no longer maintained**
PHP
35
star
68

awscdk-resources-mongodbatlas

MongoDB Atlas AWS CDK Resources
TypeScript
35
star
69

mongodb-vapor

MongoDB + Vapor integration
Swift
34
star
70

atlas-billing

JavaScript
33
star
71

atlas-app-services-examples

Example use cases for Atlas App Services
JavaScript
32
star
72

mongo-java-driver-rx

The MongoDB Java RX driver is now officially end-of-life (EOL)
Java
30
star
73

snooty

MongoDB Documentation front end
JavaScript
29
star
74

mongo-csharp-analyzer

The MongoDB Analyzer is a free tool that helps you understand how your code translates into the MongoDB Query API.
C#
27
star
75

realm-practice

realm-node-practice & realm-swift-practice
Swift
24
star
76

charts-embedding-examples

charts-embedding-examples
HTML
23
star
77

ftdc

utils for working with mongodb full-time diagnostic data capture files
Go
23
star
78

mongo-csharp-driver-jsondotnet

The C#/.NET driver will have a new component to integrate with JSON.NET that needs to live separately from the .NET driver itself.
C#
22
star
79

template-app-react-native-todo

Atlas Template Starter App - Use Device Sync from a React Native client application. This repo is generated from source code in https://github.com/mongodb-university/realm-template-apps
TypeScript
21
star
80

mongo-odbc-driver

Rust
20
star
81

marian

A search engine focused on documentation.
JavaScript
20
star
82

curator

Curator -- a build and package automation tool
Go
19
star
83

mongo-qa

General QA materials for Mongo
Java
19
star
84

anser

Data Transformation/Migration Tool
Go
19
star
85

snooty-parser

Python
19
star
86

academia-mongodb-lab-python

Lab using MongoDB with Python (PyMongo driver). Created for educational use by the MongoDB for Academia program.
Jupyter Notebook
19
star
87

kbson

Kotlin Multiplatform Bson Library
Kotlin
18
star
88

docs-compass

Python
18
star
89

docs-bi-connector

Makefile
17
star
90

atlas-sdk-go

MongoDB Atlas Golang SDK
Go
17
star
91

snooty-vscode

TypeScript
17
star
92

terraform-provider-mongodbatlas-archive

ARCHIVED ---- Hashicorp Terraform Provider for MongoDB Atlas - please use https://github.com/terraform-providers/terraform-provider-mongodbatlas
Go
17
star
93

mongo-aspnetcore-odata

Adds MongoDB support to Microsoft ASP.NET Core oData.
C#
16
star
94

template-app-swiftui-todo

Atlas Template Starter App - Use Device Sync from a SwiftUI client application. This repo is generated from source code in https://github.com/mongodb-university/realm-template-apps
Swift
16
star
95

docs-worker-pool

TypeScript
15
star
96

jasper

Jasper is a Process Management Framework
Go
15
star
97

grip

Go
15
star
98

go-client-mongodb-ops-manager

An HTTP client for Ops Manager and Cloud Manager Public API endpoints.
Go
15
star
99

vault-plugin-secrets-mongodbatlas

ARCHIVED - Hashicorp Vault MongoDB Atlas Secrets Engine - Now hosted at https://github.com/hashicorp/vault-plugin-secrets-mongodbatlas/
Go
15
star
100

docs-java

MongoDB Java driver documentation
Java
14
star