# sengi-mongodb

> A wrapper for Mongo DB so it can serve as the document store for Sengi.

Latest version **3.1.0** (published 2020-10-25) · MIT license · 0 weekly downloads

> **Deprecated.** This package is deprecated.

## Install

```sh
npm install sengi-mongodb
pnpm add sengi-mongodb
yarn add sengi-mongodb
bun add sengi-mongodb
```

## Health

**Score 10/100 (F)** — status: deprecated.

Negative: deprecated.

## Facts

| | |
|---|---|
| Version | 3.1.0 |
| Published | 2020-10-25 |
| First published | 2020-09-09 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 77.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Karl Hulme |
| Maintainers | karlhulme |

## Links

- npm: https://www.npmjs.com/package/sengi-mongodb
- Repository: https://github.com/karlhulme/sengi-mongodb
- Homepage: https://github.com/karlhulme/sengi-mongodb#readme
- Issues: https://github.com/karlhulme/sengi-mongodb/issues
- npm.io page: https://npm.io/package/sengi-mongodb

## Dependencies (2)

- [mongodb](https://npm.io/package/mongodb.md) ^3.6.1
- [check-types](https://npm.io/package/check-types.md) ^11.1.2

## Recent versions

- 3.1.0 (latest) — 2020-10-25
- 3.0.0 — 2020-09-18
- 2.0.0 — 2020-09-17
- 1.0.1 — 2020-09-09
- 1.0.0 — 2020-09-09

## README

# Sengi-MongoDB

![](https://github.com/karlhulme/sengi-mongodb/workflows/CD/badge.svg)
[![npm](https://img.shields.io/npm/v/sengi-mongodb.svg)](https://www.npmjs.com/package/sengi-mongodb)
[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)

A wrapper for Mongo DB that implements the Sengi document store interface.

## Installation

```bash
npm install sengi-mongodb
```

## Usage

To instantiate a MongoDbDocStore you have to provide the following parameters:

* **mongoUrl** - A url that identifies your Mongo DB instance.

* **mongoOptions** - An object that describes how to connect to mongo.  This is passed directly to the `MongoClient` constructor.  See the example below for connecting with a username and password.

* **config** - A configuration object

  * **getDatabaseName** - A function (docTypeName, docTypePluralName, options) that returns the name of the database to connect to.

  * **getCollectionName** - A function getCollectionName (databaseName, docTypeName, docTypePluralName, options) that returns the name of the collection to edit.

```javascript
const { createMongoDbDocStore } = require('sengi-mongodb')

const mongoDbDocStore = createMongoDbDocStore(
  'mongodb://database.server...',
  {
    auth: { user: 'sengi', password: 'sengi' },
    useUnifiedTopology: true
  },
  {
    getDatabaseName: (docTypeName, docTypePluralName, options) => 'myDatabaseName',
    getCollectionName: (databaseName, docTypeName, docTypePluralName, options) => docTypePluralName
  }
)

mongoDbDocStore.connect()
.then(() => {
  mongoDbDocStore.upsert('test', 'tests', {
    id: '0001',
    docType: 'test',
    docOps: [],
    hello: 'world'
  })
})
```

## Setup

To run the tests locally you will need MongoDB running locally:
* Listening at `https://127.0.0.1:27017`
* With an admin/root user named `sengi` and with password `sengi`.
* The database `sengi` and collection `trees`, that are used by the automated tests, will be created automatically.

You can set mongo running on your local machine by running the following docker command:

```bash
docker run -d --name test-mongo-with-sengi -p 127.0.0.1:27017:27017 \
    -e MONGO_INITDB_ROOT_USERNAME=sengi \
    -e MONGO_INITDB_ROOT_PASSWORD=sengi \
    mongo:4.2.9
```

You can use the usual docker comands to start and stop the instance.

```bash
docker ps -a
docker stop <first-4-characters>
docker rm <first-4-characters>
```

You can connect to the server by using the Mongo SH client (mongosh).

```bash
mongosh mongodb://127.0.0.1:27017 -u sengi -p sengi
```

You can issue the following commands, using Mongo SH client, to work with databases and collections.  This is not required.

```bash
show databases
use sengi
show collections
db.createCollection('trees')
db.trees.drop() # to remove it again.
```

## Development

Code base adheres to the rules chosen by https://standardjs.com/.  Code is formatted with 2 spaces.

Tests are written using Jest with 100% coverage.

```javascripts
npm test
```

Note that the tests run sequentially (`jest --runInBand`) so that only one test can access the database at a time. 

## Continuous Deployment

Any pushes or pull-requests on non-master branches will trigger the test runner.

Any pushes to master will cause the library to be re-published.

---
_Source: https://npm.io/package/sengi-mongodb · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
