Skip to content

v1.10.1

Choose a tag to compare

@koponen-styra koponen-styra released this 15 Aug 08:52
· 139 commits to main since this release

New data source integration: MongoDB

It is now possible to use a single MongoDB collection as a data source, with optional filtering/projection at retrieval time.

For example if you had collection1 in a MongoDB instance set to the following JSON document:

[
 {"foo": "a", "bar": 0},
 {"foo": "b", "bar": 1},
 {"foo": "c", "bar": 0},
 {"foo": "d", "bar": 3}
]

If you configured a MongoDB data source to use collection1:

plugins:
 data:
 mongodb.example:
 type: mongodb
 uri: <your_db_uri_here>
 auth: <your_login_info_here>
 database: database
 collection: collection1
 keys: ["foo"]
 filter: {"bar": 0}

The configuration shown above would filter this collection down to just:

[
 {"foo": "a", "bar": 0},
 {"foo": "c", "bar": 0}
]

The keys parameter in the configuration shown earlier guides how the collection is transformed into a Rego Object, mapping the unique key field(s) to the corresponding documents from the filtered collection:

{
 "a": {"foo": "a", "bar": 0},
 "c": {"foo": "c", "bar": 0}
}

You could then use this data source in a Rego policy just like any other aggregate data type. As a simple example:

package hello_mongodb

filtered_documents := data.mongodb.example

allow if {
 count(filtered_documents) == 2 # Want just 2 items in the collection.
}