This project is deprecated and is no longer being maintained.
MongoDB data source for Flora.
The module has to be added to a Flora config file by using the dataSources
object.
module.exports = {
…
dataSources: {
mongodb: {
constructor: require('@florajs/datasource-mongodb'),
options: {
server: {
host: 'localhost',
port: 27017
},
},
},
},
…
};
Alternatively, a Replica Set can be used:
module.exports = {
…
dataSources: {
mongodb: {
constructor: require('@florajs/datasource-mongodb'),
options: {
replicaSet: 'mycluster',
servers: [
{ host: 'mongo-1', port: 27017 },
{ host: 'mongo-2', port: 27017 },
],
},
},
},
…
};
Other additional options:
module.exports = {
…
dataSources: {
mongodb: {
constructor: require('@florajs/datasource-mongodb'),
options: {
ssl: true,
authSource: 'admin',
server: {
host: 'localhost',
port: 27017
},
username: 'dbuser',
password: 'dbpassword',
},
},
},
…
};
Given you want to use the database "mydatabase" on the host configured above. To map "mycollection" to a resource, the following XML can be used:
<?xml version="1.0" encoding="utf-8"?>
<resource primaryKey="id" xmlns:flora="urn:flora:options">
<flora:dataSource type="mongodb" database="mydatabase" collection="mycollection"/>
<id type="int" storedType="string" map="user" order="true"/>
<data type="raw"/>
</resource>
Objects in the database look like this (storedType is used to convert the numerical "id" to the string representation in the database):
{
id: '123456',
data: {
someKey: 'someValue',
someOtherKey: {
foo: 'bar',
...
}
}
}
Due to the flora module currently lacking data source specific type casting, it is needed to convert IDs to ObjectIDs when using ObjectIDs as primary keys:
module.exports = (api) => ({
extensions: {
preExecute: ({ request }) => {
// Replace values for "_id" with ObjectID in filters
if (request.type === 'mongodb' && request.filter) {
const dataSource = api.dataSources[request.type];
request.filter.forEach((andFilters) => {
andFilters.forEach((condition) => {
if (condition.attribute === '_id') {
if (Array.isArray(condition.value)) {
condition.value = condition.value.map((value) => dataSource.ObjectID(value));
} else {
condition.value = dataSource.ObjectID(condition.value);
}
}
});
});
}
},
},
…
});