@florajs/datasource-mongodb

3.0.0 • Public • Published

@florajs/datasource-mongodb

NPM version NPM downloads

MongoDB data source for Flora.

Usage

Configuration

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',
                },
            },
        },};

Resources

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',
            ...
        }
    }
}

Known issue when using ObjectID as primary key

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);
                            }
                        }
                    });
                });
            }
        },
    },});

License

MIT

Readme

Keywords

Package Sidebar

Install

npm i @florajs/datasource-mongodb

Weekly Downloads

1

Version

3.0.0

License

MIT

Unpacked Size

13.8 kB

Total Files

4

Last publish

Collaborators

  • mbaumgartl
  • not-implemented
  • nicokaiser