feathersjs/feathers

View on GitHub
docs/guides/cli/databases.md

Summary

Maintainability
Test Coverage
---
outline: deep
---

# Databases

<hr/>
<DatabaseSelect />

## Connection

<DatabaseBlock global-id="sql">

Depending on the SQL database you selected, a `src/<database>.ts` file will be created that sets up a connection using [KnexJS](../../api/databases/knex.md). It uses the connection settings from the `<database>` [configuration value](./default.json.md) and exports a [configure function](./app.md#configure-functions) that initializes the database connection. The Knex connection object is then accessible wherever you have access to the [app object](./app.md) via

```ts
const knex = app.get('<database>Client')
```

The database pool size can be set in the [configuration](./default.json.md) like this:

```json
"postgresql": {
  "client": "pg",
  "connection": "<pg connection string>",
  "pool": {
    "min": 0,
    "max": 7
  }
},
```

`connection` can also be an object instead of a connection string:

```json
"postgresql": {
  "client": "pg",
  "connection": {
    "host": "localhost",
    "port": 5432,
    "user": "postgres",
    "password": "postgres",
    "database": "pgtest"
  }
}
```

</DatabaseBlock>

<DatabaseBlock global-id="mongodb">

`src/mongodb.ts` exports a [configure function](./app.md#configure-functions) that connects to the MongoDB connection string set as `mongodb` in your [configuration](./default.json.md). The [MongoDB NodeJS client](https://www.mongodb.com/languages/mongodb-with-nodejs) is then accessible wherever you have access to the [app object](./app.md) via

```ts
const db = await app.get('mongodbClient')
```

The default connection string tries to connect to a local MongoDB instance with no password. To use e.g. [MongoDB Atlas](https://www.mongodb.com/cloud) change the `mongodb` property in `config/default.json` or add it as an [environment variable](./configuration.md#environment-variables) with the connection string that will look similar to this:

```
mongodb+srv://<user>:<password>@cluster0.xyz.mongodb.net/?retryWrites=true&w=majority
```

</DatabaseBlock>

## Models

<DatabaseBlock global-id="sql">

KnexJS does not have a concept of models. Instead a new service is initialized with the table name and `app.get('<database>Client')` as the connection. For more information on how to create custom queries and more, see the [SQL database adapter API documentation](../../api/databases/knex.md).

</DatabaseBlock>

<DatabaseBlock global-id="mongodb">

The collection for a MongoDB service can be accessed via

```ts
const userCollection = await app.service('users').getModel()
```

See the [MongoDB service API documentation](../../api/databases/mongodb.md) for more information.

</DatabaseBlock>