README.md

# gleam_mongo

A mongodb driver for gleam

## Quick start

```sh
gleam shell # Run an Erlang shell
```

## Installation

```sh
gleam add gleam_mongo
```

## Roadmap

- [x] support basic mongodb commands
- [x] support aggregation
- [x] support connection strings
- [x] support authentication
- [ ] support bulk operations
- [ ] support other mongodb commands
- [ ] support mongodb cursors
- [ ] support connection pooling
- [ ] support tls
- [ ] support clusters

## Usage

### Connection

```gleam
import mongo
import bson/types
import mongo/utils
import mongo/aggregation.{aggregate, exec, lookup, match}

pub fn main() {
  assert Ok(db) = mongo.connect("mongodb://username:password@localhost/app_db")

  let users =
    db
    |> mongo.collection("users")

  collection
  |> mongo.insert_one(types.Document([
    #("first_name", types.Str("Steve")),
    #("last_name", types.Str("Wozniak")),
  ]))

  collection
  |> mongo.update_one(
    types.Document([#("first_name", types.Str("Dennis"))]),
    types.Document([
      #("$set", types.Document([#("last_name", types.Str("Ritchie"))])),
    ]),
    [utils.Upsert],
  )

  collection
  |> aggregate()
  |> match(types.Document([#("first_name", types.Str("Dennis"))]))
  |> lookup(
    from: "technologies",
    local_field: "known_for",
    foreign_field: "name",
    alias: "known_for",
  )
  |> exec()
}
```