
FerretDB (previously MangoDB) was founded to become the de-facto open-source substitute to MongoDB. FerretDB is an open-source proxy, converting the MongoDB 5.0+ wire protocol queries to SQL – using PostgreSQL as a database engine.
Why do we need a MongoDB alternative in Golang?
MongoDB was originally an eye-opening technology for many developers, empowering us to build applications faster than relational databases. In its early days, its ease-to-use and well-documented drivers made MongoDB one of the simplest database solutions. However, as time passed, MongoDB abandoned its open-source roots, changing the license to SSPL – making it unusable for many open source and early-stage commercial projects.
Most MongoDB users do not require any advanced features offered by MongoDB; however, they need an easy-to-use open-source database solution. Recognizing this, FerretDB is here to fill that gap.
Scope and current state
FerretDB will be compatible with MongoDB drivers and will strive to serve as a drop-in replacement for MongoDB 5.0+.
Currently, the project is in its early stages and welcomes all contributors.
Known differences to MongoDB
- FerretDB uses the same protocol error names and codes, but the exact error messages may be different in some cases.
- FerretDB does not support NUL (
\0) characters in strings. - Database and collection names restrictions:
- name cannot start with the reserved prefix
_ferretdb_. - name must not include non-Latin letters, spaces, dots, dollars, or dashes.
- collection name length must be less or equal to 120 symbols, database name length limit is 63 symbols.
- name must not start with a number.
- the database name cannot contain capital letters.
If you encounter some other difference in behavior, please join our community to report a problem.
Quickstart with Docker Compose and Golang
These steps describe a quick local setup. They are unsuitable for most production use-cases because they keep all data inside containers.
- Store the following in the
docker-compose.ymlfile:
version: "3"
services:
postgres:
image: postgres:14
container_name: postgres
ports:
- 5432:5432
environment:
- POSTGRES_USER=user
- POSTGRES_DB=ferretdb
- POSTGRES_HOST_AUTH_METHOD=trust
postgres_setup:
image: postgres:14
container_name: postgres_setup
restart: on-failure
entrypoint: ["sh", "-c", "psql -h postgres -U user -d ferretdb -c 'CREATE SCHEMA IF NOT EXISTS test'"]
ferretdb:
image: ghcr.io/ferretdb/ferretdb:latest
container_name: ferretdb
restart: on-failure
ports:
- 27017:27017
command: ["-listen-addr=:27017", "-postgresql-url=postgres://user@postgres:5432/ferretdb"]
networks:
default:
name: ferretdbpostgrescontainer runs PostgreSQL 14 that would store data.postgres_setupcontainer creates a PostgreSQL schematestthat would act like a FerretDB database of the same name.ferretdbruns FerretDB.
- Start services with
docker-compose up -d. - If you have
mongoshinstalled, just run it to connect to FerretDB databasetest. If not, run the following command to runmongoshinside the temporary MongoDB container, attaching to the same Docker network:
docker run --rm -it --network=ferretdb --entrypoint=mongosh mongo:5 mongodb://ferretdb/
You can also install with FerretDB with the .deb and .rpm packages provided for each release.
There is no ads to display, Please add some
