MongoDB
Detailed information on the MongoDB state store component
Component format
To setup MongoDB state store create a component of type state.mongodb
. See this guide on how to create and apply a state store configuration.
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: <NAME>
spec:
type: state.mongodb
version: v1
metadata:
- name: server
value: <REPLACE-WITH-SERVER> # Required unless "host" field is set . Example: "server.example.com"
- name: host
value: <REPLACE-WITH-HOST> # Required unless "server" field is set . Example: "mongo-mongodb.default.svc.cluster.local:27017"
- name: username
value: <REPLACE-WITH-USERNAME> # Optional. Example: "admin"
- name: password
value: <REPLACE-WITH-PASSWORD> # Optional.
- name: databaseName
value: <REPLACE-WITH-DATABASE-NAME> # Optional. default: "daprStore"
- name: collectionName
value: <REPLACE-WITH-COLLECTION-NAME> # Optional. default: "daprCollection"
- name: writeConcern
value: <REPLACE-WITH-WRITE-CONCERN> # Optional.
- name: readConcern
value: <REPLACE-WITH-READ-CONCERN> # Optional.
- name: operationTimeout
value: <REPLACE-WITH-OPERATION-TIMEOUT> # Optional. default: "5s"
- name: params
value: <REPLACE-WITH-ADDITIONAL-PARAMETERS> # Optional. Example: "?authSource=daprStore&ssl=true"
Warning
The above example uses secrets as plain strings. It is recommended to use a secret store for the secrets as described here.
If you wish to use MongoDB as an actor store, append the following to the yaml.
- name: actorStateStore
value: "true"
Spec metadata fields
Field | Required | Details | Example |
---|---|---|---|
server | Y | The server to connect to, when using DNS SRV record | “server.example.com” |
host | Y | The host to connect to | “mongo-mongodb.default.svc.cluster.local:27017” |
username | N | The username of the user to connect with (applicable in conjunction with host ) | “admin” |
password | N | The password of the user (applicable in conjunction with host ) | “password” |
databaseName | N | The name of the database to use. Defaults to “daprStore” | “daprStore” |
collectionName | N | The name of the collection to use. Defaults to “daprCollection” | “daprCollection” |
writeConcern | N | The write concern to use | “majority” |
readConcern | N | The read concern to use | “majority” , “local” ,“available” , “linearizable” , “snapshot” |
operationTimeout | N | The timeout for the operation. Defaults to “5s” | “5s” |
params | N** | Additional parameters to use | “?authSource=daprStore&ssl=true” |
[*] The
server
andhost
fields are mutually exclusive. If neither or both are set, Dapr will return an error.[**] The
params
field accepts a query string that specifies connection specific options as<name>=<value>
pairs, separated by"&"
and prefixed with"?"
. e.g. to use “daprStore” db as authentication database and enabling SSL/TLS in connection, specify params as"?authSource=daprStore&ssl=true"
. See the mongodb manual for the list of available options and their use cases.
Setup MongoDB
You can run MongoDB locally using Docker:
docker run --name some-mongo -d mongo
You can then interact with the server using localhost:27017
.
If you do not specify a databaseName
value in your component definition, make sure to create a database named daprStore
.
The easiest way to install MongoDB on Kubernetes is by using the Helm chart:
helm install mongo stable/mongodb
This installs MongoDB into the default
namespace. To interact with MongoDB, find the service with: kubectl get svc mongo-mongodb
.
For example, if installing using the example above, the MongoDB host address would be:
mongo-mongodb.default.svc.cluster.local:27017
Follow the on-screen instructions to get the root password for MongoDB. The username is admin
by default.
TTLs and cleanups
This state store supports Time-To-Live (TTL) for records stored with Dapr. When storing data using Dapr, you can set the ttlInSeconds
metadata property to indicate when the data should be considered “expired”.
Related links
- Basic schema for a Dapr component
- Read this guide for instructions on configuring state store components
- State management building block
Last modified October 12, 2023: Update config.toml (#3826) (0ffc2e7)