From 93986a21a4c368a9c0b820c87786d57ce52a2a63 Mon Sep 17 00:00:00 2001 From: dejecj Date: Fri, 4 Nov 2022 22:40:43 +0000 Subject: [PATCH] feat: MongoDB Node - added new option to specify fields to parse as ObjectID --- .../nodes/MongoDb/GenericFunctions.ts | 11 ++++++++-- .../nodes-base/nodes/MongoDb/MongoDb.node.ts | 20 +++++++++++++++---- .../nodes/MongoDb/MongoDbDescription.ts | 7 +++++++ 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/packages/nodes-base/nodes/MongoDb/GenericFunctions.ts b/packages/nodes-base/nodes/MongoDb/GenericFunctions.ts index 81695996debb5..2a2de9b1cc1f5 100644 --- a/packages/nodes-base/nodes/MongoDb/GenericFunctions.ts +++ b/packages/nodes-base/nodes/MongoDb/GenericFunctions.ts @@ -14,6 +14,7 @@ import { } from './mongoDb.types'; import { get, set } from 'lodash'; +import { ObjectId } from 'mongodb'; /** * Standard way of building the MongoDB connection string, unless overridden with a provided string @@ -84,6 +85,7 @@ export function prepareItems( updateKey = '', useDotNotation = false, dateFields: string[] = [], + oidFields: string[] = [], ) { let data = items; @@ -106,8 +108,13 @@ export function prepareItems( fieldData = json[field] !== undefined ? json[field] : null; } - if (fieldData && dateFields.includes(field)) { - fieldData = new Date(fieldData as string); + if (fieldData){ + if(dateFields.includes(field)) { + fieldData = new Date(fieldData as string); + } + if(oidFields.includes(field)) { + fieldData = new ObjectId(fieldData as string); + } } if (useDotNotation) { diff --git a/packages/nodes-base/nodes/MongoDb/MongoDb.node.ts b/packages/nodes-base/nodes/MongoDb/MongoDb.node.ts index 8402e9dfc3a89..3fcd38415f4fd 100644 --- a/packages/nodes-base/nodes/MongoDb/MongoDb.node.ts +++ b/packages/nodes-base/nodes/MongoDb/MongoDb.node.ts @@ -175,6 +175,9 @@ export class MongoDb implements INodeType { const dateFields = prepareFields( this.getNodeParameter('options.dateFields', 0, '') as string, ); + const oidFields = prepareFields( + this.getNodeParameter('options.oidFields', 0, '') as string, + ); const updateKey = ((this.getNodeParameter('updateKey', 0) as string) || '').trim(); @@ -182,7 +185,7 @@ export class MongoDb implements INodeType { ? { upsert: true } : undefined; - const updateItems = prepareItems(items, fields, updateKey, useDotNotation, dateFields); + const updateItems = prepareItems(items, fields, updateKey, useDotNotation, dateFields, oidFields); for (const item of updateItems) { try { @@ -215,6 +218,9 @@ export class MongoDb implements INodeType { const dateFields = prepareFields( this.getNodeParameter('options.dateFields', 0, '') as string, ); + const oidFields = prepareFields( + this.getNodeParameter('options.oidFields', 0, '') as string, + ); const updateKey = ((this.getNodeParameter('updateKey', 0) as string) || '').trim(); @@ -222,7 +228,7 @@ export class MongoDb implements INodeType { ? { upsert: true } : undefined; - const updateItems = prepareItems(items, fields, updateKey, useDotNotation, dateFields); + const updateItems = prepareItems(items, fields, updateKey, useDotNotation, dateFields, oidFields); for (const item of updateItems) { try { @@ -256,8 +262,11 @@ export class MongoDb implements INodeType { const dateFields = prepareFields( this.getNodeParameter('options.dateFields', 0, '') as string, ); + const oidFields = prepareFields( + this.getNodeParameter('options.oidFields', 0, '') as string, + ); - const insertItems = prepareItems(items, fields, '', useDotNotation, dateFields); + const insertItems = prepareItems(items, fields, '', useDotNotation, dateFields, oidFields); const { insertedIds } = await mdb .collection(this.getNodeParameter('collection', 0) as string) @@ -287,6 +296,9 @@ export class MongoDb implements INodeType { const dateFields = prepareFields( this.getNodeParameter('options.dateFields', 0, '') as string, ); + const oidFields = prepareFields( + this.getNodeParameter('options.oidFields', 0, '') as string, + ); const updateKey = ((this.getNodeParameter('updateKey', 0) as string) || '').trim(); @@ -294,7 +306,7 @@ export class MongoDb implements INodeType { ? { upsert: true } : undefined; - const updateItems = prepareItems(items, fields, updateKey, useDotNotation, dateFields); + const updateItems = prepareItems(items, fields, updateKey, useDotNotation, dateFields, oidFields); for (const item of updateItems) { try { diff --git a/packages/nodes-base/nodes/MongoDb/MongoDbDescription.ts b/packages/nodes-base/nodes/MongoDb/MongoDbDescription.ts index 130a747a449f6..b52ff1da4f664 100644 --- a/packages/nodes-base/nodes/MongoDb/MongoDbDescription.ts +++ b/packages/nodes-base/nodes/MongoDb/MongoDbDescription.ts @@ -280,6 +280,13 @@ export const nodeDescription: INodeTypeDescription = { default: false, description: 'Whether to use dot notation to access date fields', }, + { + displayName: 'ObjectID Fields', + name: 'oidFields', + type: 'string', + default: '', + description: 'Comma separeted list of fields that will be parsed as Mongo ObjectID type', + } ], }, ],