MongoDB Collection (Cinchy Event Triggered)
Overview
Data changes in the Cinchy Event Broker (CDC) can be used to trigger a data sync from a MongoDB data source to a specified target. The attributes of the CDC Event are available to use as parameters within the Data Source Definition to narrow the scope of the request. For example, a lookup.
The MongoDB Collection (Cinchy Event Triggered) Source supports real-time syncs.
Considerations
Please review the following considerations before you set up your MongoDB Collection data sync source:
- We currently only support SCRAM authentication (Mongo 4.0+).
- Syncs are column based. This means that you must flatten the MongoDB source document prior to sync by using a projection (See section 2: Projection (JSON Object)).
- The column names used in the source must match elements on the root object, except for "$" which can be used to retrieve the full document.
- By default, MongoDB batch size is 101.
- By default, bulk operations size is 5000.
- Due to a conversion of doubles to decimals that occurs during the sync process, minor data losses may occur.
- The following data types aren't supported:
- Binary Data
- Regular Expression
- DBPointer
- JavaScript
- JavaScript code with scope
- Symbol
- Min Key
- Max Key
- The following data types are supported with conversions:
- ObjectID is supported, but converted to string
- Object is supported, but converted to JSON
- Array is supported, but converted to JSON
- Timestamp is supported, but converted to 64-bit integers
Connection definitions
The following sections in the Source configuration of the Connections experience can reference attributes of the CDC Event as parameters:
- Connection String
- Database Name
- Collection Name
- Query
- Projection
- Pipeline
In Cinchy v5.6+, you can also reference attributes of the CDC Event in Calculated Columns.
Note that syncs making use of this must limit their batch size to 1.
Parameters use the column name or alias as defined in the CDC Event Listener Config prefixed with an @
. For example, @CompanyName
would be the parameter name for the following Cinchy CDC listener Topic configuration.
{
"tableGuid": "420c1851-31ed-4ada-a71b-31659bca6f92",
"fields": [
{
"column": "Cinchy Id",
"alias": "CinchyId"
},
{
"column": "Company Name",
"alias": "CompanyName"
}
]
}
Parameter names are case sensitive when used in the Connection configuration. Parameter matching is performed using literal string replacements. Names shouldn't contain spaces (spaces are automatically removed), and should have differing prefixes.
The following set of parameters will be available on every event even if they're not present in the listener config
- @Version
- @DraftVersion
- @CinchyRecordType
- @ApprovalState
- @ModifiedBy
- @Modified
- @Deleted
Info tab
You can find the parameters in the Info tab below (Image 1).
Values
Parameter | Description | Example |
---|---|---|
Title | Mandatory. Input a name for your data sync | MongoDB Cinchy Event to Cinchy |
Variables | Optional. Review our documentation on Variables here for more information about this field. | |
Permissions | Data syncs are role based access systems where you can give specific groups read, write, execute, and/or all of the above with admin access. Inputting at least an Admin Group is mandatory. |
Source tab
The following table outlines the mandatory and optional parameters you will find on the Source tab (Image 2).
- Source Details
- Schema
- Filter
The following parameters will help to define your data sync source and how it functions.
Parameter | Description | Example |
---|---|---|
Source | Mandatory. Select your source from the drop-down menu. | MongoDB Collection (Cinchy Event Triggered) |
Connection String | Mandatory. Encrypted connection string. MongoDB Connection String guide. | Example (Default): mongodb+srv://<username>:<password>@<mongo host URI> Example (Different database): mongodb+srv://<username>:<password>@<mongo host URI>?authSource=<authentication_db> |
Database | Mandatory. Name of the MongoDB database containing the collection. | Blog |
Collection | Mandatory. Name of the MongoDB collection. | Article |
Type | Mandatory. Method for data retrieval, either db.collection.find() or db.collection.aggregate() . | |
Query (JSON Object) | Query for data retrieval. Appears if db.collection.find() is selected. | Example Query |
Projection (JSON Object) | Appears if db.collection.find() is selected. Must flatten MongoDB source document. | Example Projection |
Pipeline (JSON Array of Objects) | Aggregation pipeline stages. Appears if db.collection.aggregate() is selected. | |
Use SSL | Checkbox for x.509 certificate authentication. If checked, enter SSL Key PEM, SSL Certificate PEM, and SSL CLA PEM. |
**The** Schema section is where you define which source columns you want to sync in your connection. You can repeat the values for multiple columns.
Parameter | Description | Example |
---|---|---|
Name | Mandatory. The name of your column as it appears in the source. | Name |
Alias | Optional. You may choose to use an alias on your column so that it has a different name in the data sync. | |
Data Type | Mandatory. The data type of the column values. | Text |
Description | Optional. You may choose to add a description to your column. |
Select Show Advanced for more options for the Schema section.
Parameter | Description | Example |
---|---|---|
Mandatory |
| |
Validate Data |
| |
Trim Whitespace | Optional if data type = text. For Text data types, you can choose whether to trim the whitespace._ | |
Max Length | Optional if data type = text. You can input a numerical value in this field that represents the maximum length of the data that can be synced in your column. If the value is exceeded, the row will be rejected (you can find this error in the Execution Log). |
You can choose to add in a Transformation > String Replacement by inputting the following:
Parameter | Description | Example |
---|---|---|
Pattern | Mandatory if using a Transformation. The pattern for your string replacement. | |
Replacement | What you want to replace your pattern with. |
You have the option to add a source filter to your data sync. Please review the documentation here for more information on source filters.
Query example
// query: where "Price" is less than 10
blog> db.Articles.find({ "Price": { "$lt": 10 } })
[
{
_id: ObjectId("63d8137bd755fcdeed234403"),
Name: 'Shirt',
Price: 9.95,
Details: { Color: 'White', Size: 'Small' },
Stock: 61
}
]
Projection example
// Flatten the document
blog> db.Articles.find({}, { Name: 1, Price: 1, Color: "Details.Color", Size: "Details.Size", Stock: 1 })
[
{
_id: ObjectId("63d812afd755fcdeed234402"),
Name: 'Shirt',
Price: 19.95,
Stock: 12,
Color: 'Details.Color',
Size: 'Details.Size'
},
{
_id: ObjectId("63d8137bd755fcdeed234403"),
Name: 'Shirt',
Price: 9.95,
Stock: 61,
Color: 'Details.Color',
Size: 'Details.Size'
}
]
Next steps
- Configure your Destination
- Define your Sync Actions.
- Add in your Post Sync Scripts, if required.
- To run a real-time sync (using the Cinchy Event Triggered MongoDB Source), set up your Listener Config using the Cinchy Event Broker/CDC and enable it to begin your sync.
Appendix A
Data types
The MongoDB Collection Data Source obtains BSON documents from MongoDB. BSON, short for Binary JSON, is a binary-encoded serialization of JSON-like documents. Like JSON, BSON supports the embedding of documents and arrays within other documents and arrays. BSON also contains extensions that allow representation of data types that aren't part of the JSON spec. For example BSON makes a distinction between Int32 and Int64.
The following table shows how MongoDB data types are translated in Cinchy.
MongoDB | Cinchy | Notes |
---|---|---|
Double | Number | Supported |
String | Text | Supported |
Object | Text (JSON) | Supported |
Array | Text (JSON) | Supported |
Binary Data | Binary | Unsupported |
ObjectId | Text | Supported |
Boolean | Bool | Supported |
Date | Date | Supported |
Null | - | Supported |
RegEx | - | Unsupported |
JavaScript | - | Unsupported |
Timestamp | Number | Supported |
32-bit Integer | Number | Supported |
64-bit Integer | Number | Supported |
Decimal28 | Number | Supported |
Min Key | - | Unsupported |
Max Key | - | Unsupported |
- | Geography | Unsupported |
- | Geometry | Unsupported |
Listener Config
To configure a MongoDB Collection (Cinchy Event Triggered) connection, a listener must be configured via the Listener Config table with an Event Connector Type of Cinchy CDC.
Review the Cinchy Event Broker/CDC Listener Configuration values here, and then navigate to the Listener Config table to input a new row.
When setting up your listener configuration for your data sync, keeping the following constraints in mind:
- Column names in the listener config shouldn't contain spaces. If they do, they will be automatically removed. For example, a column named Company Name will become the replacement parameter @CompanyName.
- The replacement parameter names are case sensitive.
- Column names in the listener config shouldn't be prefixes of other column names. For example, if you have a column called Name, you shouldn't have another called Name2 as the value of @Name2 may end up being replaced by the value of @Name suffixed with a
2
._
Example Listener Configuration
{
"tableGuid": "420c1851-31ed-4ada-a71b-31659bca6f92",
"fields": [
{
"column": "Cinchy Id",
"alias": "CinchyId"
},
{
"column": "Company Name",
"alias": "CompanyName"
}
]
}