@resolveio/server-lib 20.3.24 → 20.3.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/managers/mongo.manager.ts"],"names":["simpl_schema_1","require","mongodb_1","index_1","user_collection_1","common_1","log_collection_1","NodeCache","crypto","scmp","monitor_manager_1","os_1","numCPUs","cpus","length","v8","async_1","MongoManager","_this","this","_collections","_mongoQueue","_mongoQueueId","_mongoQueueRunning","_mongoQueueCacheId","_heapStats","getHeapStatistics","_heapLimit","heap_size_limit","_serverCollections","_debugMongoQueueHits","_debugRemoveCacheHits","_debugMongoQueueCollections","_nodeCache","stdTTL","checkperiod","setInterval","ResolveIOServer","getMainServer","getSubscriptionManager","getEnableDebug","console","log","Date","JSON","stringify","sort","a","b","name_collection","localeCompare","collection","function","initServerCollections","runQueue","prototype","getMainDB","listCollections","toArray","collections","_a","sent","getServerCollections","registerCollection","collectionOptions","timeseries","timeField","some","name","collectionName","type","dropCollection","then","createCollection","push","filter","addToQueue","mongoQueue","name_function","name_function_addt","data_function","data_function_addt","running","cbs_next","cbs","_id","splice","queueArr","i","monitor_2","monitor_1","hits","invalidateFlag","cacheId","res_1","parse","get","dateReviver","forEach","cb","_d","MonitorMongo","__spreadArray","_b","_c","apply","res","finish","invalidateCount","concat","stringifyLength","stringifyFail","replace","e","Array","isArray","addToCache","err","map","indexOf","id","data","nodeCacheSize","getStats","vsize","deleteCount","zz","queue","del","set","invalidateQueryCache","lookup_collections","includes","MongoManagerModel","exports","options","versionOptions","collection_main","collection_version","MongoManagerUserCollection","MongoManagerCollection","useVersionCollection","useVersions","versionSchema","deepCopy","schema","blackbox","useReportBuilder","reportBuilderLookupTables","timestamps","createLogs","checkSchema","createIndex","_id._id","_id.__v","versionCollection","schemaCopy","interval","simplschema","rbSchema","useRB","default","buildRbLookups","buildRbSchema","getMongoManager","clearInterval","extractIndexNameFromError","errorMessage","matches","match","aggregate","pipeline","skipCache","Promise","resolve","reject","monitor","aggregateCount","cached","from","elem","index","self","aggregateCursor","cursor","on","ev","aggregateStream","streamOptions","stream","bulkWrite","operations","bypassLogs","bypassCheckSchema","__awaiter","logs","versionOps","deleteOldVersionsOps","bulkOps","updateFilters","updateManyFilters","deleteManyFilters","op","opType","Object","keys","find","$or","currentDocs","getNestedValue","doc","key","split","reduce","acc","part","item","val","undefined","findMatchingDocs","matchDocument","every","value","docValue","subFilter","evaluateCondition","condition","$in","$nin","$ne","$gt","$gte","$lt","$lte","$exists","RegExp","$regex","$options","test","date","document","objectIdHexString","this_1","hasOwnProperty","__v","createdAt","updatedAt","validation","newContext","validate","validationErrors","getMethodManager","callMethodInternal","call","insertOne","id_document","payload","getBinarySize","method","id_user","user","messageId","route","matchingDocs","matchingDocs_1","currentDoc","update","$set","modifier","versionDoc","objectContainsPropertyDeep","$inc","deleteMany","upsert","$setOnInsert","replacement","_e","matchingDocs_2","_f","matchingDocs_3","_i","operations_1","slice","mainResult","Logs","err_1","countDocuments","create","f_docs","insertMany","fieldOrSpec","indexQueue","action","specs","result","createIndexes","indexSpecs","docs","replaceOne","$and","acknowledged","deletedCount","deleteOne","monitor_3","findOneAndDelete","returnVal","monitor_4","distinct","drop","dropIndex","indexName","dropIndexes","monitor_5","findById","findOne","findCount","count","findCursor","removeAllListeners","findStream","monitor_6","findOneAndReplace","findOneAndUpdate","indexes","indexExists","bypassMonitor","validationResults","validDocs","idx","monitor_7","listIndexes","rename","newName","monitor_8","modifiedCount","prevDoc","docId","docVersion","updatedDoc_1","getMongoMergeUpdatedDoc","monitor_9","monitor_10","returnDocument","monitor_11","monitor_12","updateMany","bypassVersions","$unset","updateOne","monitor_13","monitor_14","monitor_15","ok","monitor_16","watchCollection","watch","task","callback","dbCollection","code","err_2","message","existingIndexName","innerError_1","Error","_super","__extends","authenticate","password","attemptsInterval","Math","pow","attempts","calculatedInterval","last","now","getTime","Users","error","salt","pbkdf2","iterations","keylen","digestAlgorithm","hashBuffer","Buffer","hash","serializeUser","username","deserializeUser","setPassword","randomBytes","saltBuffer","toString","pbkdf2Promisified","hashRaw","services","rej","changePassword","oldPassword","newPassword","authUser","register","email","resetAttempts","ObjectId","toHexString","saltlen","obj","prop"],"mappings":"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","file":"mongo.manager.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { AggregateOptions, AggregationCursor, BulkWriteOptions, ChangeStream, ChangeStreamOptions, CommandOperationOptions, CountDocumentsOptions, CreateCollectionOptions, CreateIndexesOptions, CursorStreamOptions, DeleteOptions, Filter, FindCursor, FindOneAndDeleteOptions, FindOneAndReplaceOptions, FindOneAndUpdateOptions, FindOptions, IndexDescription, IndexInformationOptions, InsertOneOptions, ListIndexesCursor, ListIndexesOptions, ObjectId, RenameOptions, ReplaceOptions, UpdateOptions, OptionalId, Collection, CollectionInfo, OptionalUnlessRequiredId, AnyBulkWriteOperation, BulkWriteResult, DbStatsOptions } from 'mongodb';\nimport { LookupTables } from '../models/report-builder.model';\nimport { ResolveIOServer } from '../index';\nimport { Users } from '../collections/user.collection';\nimport { buildRbLookups, buildRbSchema, dateReviver, deepCopy, getBinarySize, getMongoMergeUpdatedDoc } from '../util/common';\nimport { UserModel } from '../models/user.model';\nimport { Logs } from '../collections/log.collection';\nimport * as NodeCache from 'node-cache';\nconst crypto = require('crypto');\nconst scmp = require('scmp');\nimport { MonitorMongo } from './monitor.manager';\nimport { CollectionDocument, Document } from '../models/collection-document.model';\nimport { cpus } from 'os';\nconst numCPUs = cpus().length;\nconst v8 = require('v8');\nimport async from 'async';\n\ninterface MongoQueueModel {\n\t_id: number,\n\tname_collection: string;\n\tlookup_collections: string[];\n\tname_function: string;\n\tdata_function: any[];\n\tname_function_addt: string;\n\tdata_function_addt: any[];\n\tcbs: Function[];\n\tcbs_next: Function[];\n\trunning: boolean;\n\tcacheId: number;\n\tinvalidateFlag: boolean;\n\tinvalidateCount: number;\n}\n\n// export declare interface MongoManagerFilterOperators<T> extends Document {\nexport declare interface MongoManagerFilterParamaterOperators<P> {\n\t$eq?: P;\n $gt?: P;\n $gte?: P;\n $in?: P extends Array<any> ? P : P[];\n $lt?: P;\n $lte?: P;\n $ne?: P;\n $nin?: P extends Array<any> ? P : P[];\n $not?: P extends string ? MongoManagerFilterParamaterOperators<P> | RegExpConstructor : MongoManagerFilterParamaterOperators<P>;\n $exists?: boolean;\n $expr?: any[]\n $regex?: P extends string ? RegExpConstructor | string : never;\n $options?: P extends string ? string : never;\n $geoIntersects?: {\n $geometry: Document;\n };\n $geoWithin?: Document;\n $near?: Document;\n $nearSphere?: Document;\n $maxDistance?: number;\n $all?: any[];\n $elemMatch?: Document;\n $size?: P extends any[] ? number : never;\n}\n\nexport declare interface MongoManagerFilterOperators<T> extends Document { //TODO: Remove extends document when I get answer on S.O.\n $and?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n $nor?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n $or?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n $text?: {\n $search: string;\n $language?: string;\n $caseSensitive?: boolean;\n $diacriticSensitive?: boolean;\n };\n $where?: string | ((this: T) => boolean);\n $comment?: string | Document;\n}\n\n// function isDotStringRegExp(obj: Object, dotKey: string): boolean {\n// \tlet keyData = dotKey.split('.');\n// \tlet objData = obj;\n\t\n// \tfor (let i = 0; i < keyData.length; i++) {\n// \t\tlet key = keyData[i];\n// \t\tif (objData.hasOwnProperty(key)) {\n// \t\t\tobjData = objData[key];\n\t\t\t\n// \t\t\tif (i === keyData.length - 1) {\n// \t\t\t\treturn true;\n// \t\t\t}\n// \t\t}\n// \t\telse {\n// \t\t\treturn false;\n// \t\t}\n// \t}\n// }\n\n// export declare type MongoManagerDotStringFilter<T> = {\n// \t[key: string]: (isDotStringRegExp(T, key) ? any : never);\n// };\n\nexport declare type MongoManagerFilter<T> = {\n\t[P in keyof T]?: T[P] | MongoManagerFilterParamaterOperators<T[P]>;\n};\n\nexport declare type MongoManagerUnsetFilter<T> = {\n\t[P in keyof T]?: number | boolean;\n};\n\nexport declare type MongoManagerIncFilter<T> = {\n\t[P in keyof T]?: number;\n};\n\nexport declare type MongoManagerUpdateFilter<T> = {\n $inc?: MongoManagerIncFilter<T> | Document;\n $set?: MongoManagerFilter<T> | Document;\n $setOnInsert?: MongoManagerFilter<T> | Document;\n $unset?: MongoManagerUnsetFilter<T> | Document;\n};\n\nexport class MongoManager {\n\tprivate _collections: MongoManagerCollection<CollectionDocument>[] = [];\n\tprivate _mongoQueue: MongoQueueModel[] = [];\n\tprivate _mongoQueueId = 0;\n\tprivate _mongoQueueRunning = false;\n\n\tprivate _nodeCache;\n\tprivate _mongoQueueCacheId = 1;\n\n\tprivate _heapStats = v8.getHeapStatistics();\n\tprivate _heapLimit = this._heapStats.heap_size_limit / numCPUs / 8;\n\n\tprivate _serverCollections: (CollectionInfo | Pick<CollectionInfo, \"name\" | \"type\">)[] = [];\n\n\tprivate _debugMongoQueueHits = 0;\n\tprivate _debugRemoveCacheHits = 0;\n\tprivate _debugMongoQueueCollections = [];\n\n\tconstructor() {\n\t\tthis._nodeCache = new NodeCache( { stdTTL: 0, checkperiod: 0 } );\n\n\t\tsetInterval(() => {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo Manager', 'Collections', this._collections.length);\n\t\t\t\tconsole.log(new Date(), 'Mongo Manager', 'Mongo Queue', this._mongoQueue.length, JSON.stringify(this._mongoQueue.sort((a, b) => a.name_collection.localeCompare(b.name_collection)), null, 2));\n\t\t\t\tconsole.log(new Date(), 'Mongo Manager', 'Server Collections', this._serverCollections.length);\n\t\t\t\tconsole.log(new Date(), 'Mongo Manager', 'Mongo Queue Hits', this._debugMongoQueueHits);\n\t\t\t\tconsole.log(new Date(), 'Mongo Manager', 'Mongo Queue Collections', this._debugMongoQueueCollections.sort((a, b) => a.collection.localeCompare(b.collection) || a.function.localeCompare(b.function)));\n\t\t\t\tconsole.log(new Date(), 'Mongo Manager', 'Cache Cleanup Hits', JSON.stringify(this._debugRemoveCacheHits, null, 2));\n\t\t\t}\n\t\t\t\t\n\t\t\tthis._debugMongoQueueHits = 0;\n\t\t\tthis._debugRemoveCacheHits = 0;\n\t\t\tthis._debugMongoQueueCollections = [];\n\t\t}, 60000);\n\n\t\tthis.initServerCollections();\n\n\t\tthis.runQueue();\n\t}\n\n\tasync initServerCollections() {\n\t\tlet collections = await ResolveIOServer.getMainDB().listCollections().toArray();\n\t\tthis._serverCollections = collections;\n\t}\n\n\tgetServerCollections() {\n\t\treturn this._serverCollections;\n\t}\n\n\tregisterCollection(collection: MongoManagerCollection<CollectionDocument>) {\n\t\tif (collection.collectionOptions && collection.collectionOptions.timeseries && collection.collectionOptions.timeseries.timeField && this._serverCollections.some(a => a.name === collection.collectionName && a.type === 'collection')) {\n\t\t\tResolveIOServer.getMainDB().dropCollection(collection.collectionName).then(() => {\n\t\t\t\tthis.createCollection(collection);\n\t\t\t});\n\t\t}\n\t\n\t\tthis._collections.push(collection);\n\t}\n\n\tcreateCollection(collection: MongoManagerCollection<CollectionDocument>) {\n\t\tResolveIOServer.getMainDB().createCollection<CollectionDocument>(collection.collectionName, collection.collectionOptions);\n\t}\n\n\tcollections() {\n\t\treturn this._collections;\n\t}\n\n\tcollection(collectionName: string): MongoManagerCollection<CollectionDocument> | MongoManagerUserCollection<CollectionDocument> {\n\t\treturn this._collections.filter(a => a.collectionName === collectionName)[0];\n\t}\n\n\taddToQueue(mongoQueue: MongoQueueModel) {\n\t\tlet _mongoQueue = this._mongoQueue.filter(a => a.name_collection === mongoQueue.name_collection && a.name_function === mongoQueue.name_function && a.name_function_addt === mongoQueue.name_function_addt && JSON.stringify(a.data_function) === JSON.stringify(mongoQueue.data_function) && JSON.stringify(a.data_function_addt) === JSON.stringify(mongoQueue.data_function_addt))[0];\n\t\t\n\t\tif (_mongoQueue) {\n\t\t\tif (!_mongoQueue.running) {\n\t\t\t\t_mongoQueue.cbs.push(mongoQueue.cbs[0]);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_mongoQueue.cbs_next.push(mongoQueue.cbs[0]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tmongoQueue._id = this._mongoQueueId;\n\t\t\tthis._mongoQueueId += 1;\n\n\t\t\tthis._mongoQueue.splice(0, 0, mongoQueue);\n\t\t}\n\t}\n\n\tprivate async runQueue() {\n\t\tsetInterval(() => {\n\t\t\tif (!this._mongoQueueRunning) {\n\t\t\t\tconst queueArr = this._mongoQueue.filter(a => !a.running && a.cbs.length);\n\t\t\t\tif (queueArr.length) {\n\t\t\t\t\tthis._mongoQueueRunning = true;\n\t\t\t\t\t\n\t\t\t\t\tfor (let i = queueArr.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tthis._debugMongoQueueHits += 1;\n\n\t\t\t\t\t\tlet mongoQueue = queueArr[i];\n\n\t\t\t\t\t\tif (!this._debugMongoQueueCollections.some(a => a.collection === mongoQueue.name_collection && a.function === mongoQueue.name_function)) {\n\t\t\t\t\t\t\tthis._debugMongoQueueCollections.push({\n\t\t\t\t\t\t\t\tcollection: mongoQueue.name_collection,\n\t\t\t\t\t\t\t\tfunction: mongoQueue.name_function,\n\t\t\t\t\t\t\t\thits: 1\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._debugMongoQueueCollections.filter(a => a.collection === mongoQueue.name_collection && a.function === mongoQueue.name_function)[0].hits += 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmongoQueue.running = true;\n\t\t\t\t\t\tmongoQueue.invalidateFlag = false;\n\n\t\t\t\t\t\tif (mongoQueue.cacheId) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tlet res = JSON.parse(this._nodeCache.get(mongoQueue.cacheId), dateReviver);\n\n\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\tcb(null, res, true);\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tmongoQueue.cbs = [];\n\t\t\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\t\tmongoQueue.cacheId = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (!mongoQueue.cacheId) {\n\t\t\t\t\t\t\tif (!mongoQueue.name_function_addt) {\n\t\t\t\t\t\t\t\tlet monitor = new MonitorMongo(mongoQueue.name_function, mongoQueue.name_collection, JSON.stringify(mongoQueue.data_function));\n\t\t\t\t\t\t\t\tResolveIOServer.getMainDB().collection(mongoQueue.name_collection)[mongoQueue.name_function](...mongoQueue.data_function).then(res => {\n\t\t\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\t\t\tif (!mongoQueue.invalidateFlag) {\n\t\t\t\t\t\t\t\t\t\tmongoQueue.invalidateCount = 0;\n\n\t\t\t\t\t\t\t\t\t\tlet stringifyLength = 0;\n\t\t\t\t\t\t\t\t\t\tlet stringifyFail = false;\n\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tlet stringify = JSON.stringify(res).replace(/[\\[\\]\\,\\\"]/g,'');\n\t\t\t\t\t\t\t\t\t\t\tstringifyLength\t = stringify.length;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcatch(e) {\n\t\t\t\t\t\t\t\t\t\t\tstringifyFail = true;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (!stringifyFail && res !== null && res !== undefined && (!Array.isArray(res) || res.length) && stringifyLength < 10000000) {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cacheId = this._mongoQueueCacheId;\n\t\t\t\t\t\t\t\t\t\t\tthis._mongoQueueCacheId += 1;\n\n\t\t\t\t\t\t\t\t\t\t\tthis.addToCache(mongoQueue.cacheId, res);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cacheId = 0;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\t\t\tcb(null, res, false);\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\tif (mongoQueue.cbs_next.length) {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs = mongoQueue.cbs_next;\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs_next = [];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs = [];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tif (mongoQueue.invalidateCount >= 5) {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.invalidateCount = 0;\n\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\t\t\t\tcb(null, res, false);\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs = mongoQueue.cbs.concat(mongoQueue.cbs_next);\n\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs_next = [];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\t\t\tmonitor.finish();\n\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Error ' + mongoQueue.name_function, mongoQueue.name_collection, ...mongoQueue.data_function, err);\n\n\t\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\t\tcb(err, null, false);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\t\t\t\t\tmongoQueue.cbs_next.forEach(cb => {\n\t\t\t\t\t\t\t\t\t\tcb(err, null, false);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id) >= 0) {\n\t\t\t\t\t\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 1);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tlet monitor = new MonitorMongo(mongoQueue.name_function, mongoQueue.name_collection, JSON.stringify([...mongoQueue.data_function, mongoQueue.name_function_addt, ...mongoQueue.data_function_addt]));\n\t\t\t\t\t\t\t\tResolveIOServer.getMainDB().collection(mongoQueue.name_collection)[mongoQueue.name_function](...mongoQueue.data_function)[mongoQueue.name_function_addt](...mongoQueue.data_function_addt).then(res => {\n\t\t\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\t\t\tif (!mongoQueue.invalidateFlag) {\n\t\t\t\t\t\t\t\t\t\tmongoQueue.invalidateCount = 0;\n\n\t\t\t\t\t\t\t\t\t\tlet stringifyLength = 0;\n\t\t\t\t\t\t\t\t\t\tlet stringifyFail = false;\n\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tlet stringify = JSON.stringify(res).replace(/[\\[\\]\\,\\\"]/g,'');\n\t\t\t\t\t\t\t\t\t\t\tstringifyLength\t = stringify.length;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcatch(e) {\n\t\t\t\t\t\t\t\t\t\t\tstringifyFail = true;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tif (!stringifyFail && res !== null && res !== undefined && (!Array.isArray(res) || res.length) && stringifyLength < 10000000) {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cacheId = this._mongoQueueCacheId;\n\t\t\t\t\t\t\t\t\t\t\tthis._mongoQueueCacheId += 1;\n\t\t\t\t\t\t\t\t\t\t\tthis.addToCache(mongoQueue.cacheId, res);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cacheId = 0;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\t\t\tcb(null, res, false);\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\tif (mongoQueue.cbs_next.length) {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs = mongoQueue.cbs_next;\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs_next = [];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs = [];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tif (mongoQueue.invalidateCount >= 5) {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.invalidateCount = 0;\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\t\t\t\tcb(null, res, false);\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs = mongoQueue.cbs.concat(mongoQueue.cbs_next);\n\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs_next = [];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\t\tcb(err, null, false);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\t\t\t\t\tmongoQueue.cbs_next.forEach(cb => {\n\t\t\t\t\t\t\t\t\t\tcb(err, null, false);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id) >= 0) {\n\t\t\t\t\t\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 1);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._mongoQueueRunning = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}, 25);\n\t}\n\n\tprivate addToCache(id, data) {\n\t\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\t\t\t\t\t\t\n\t\tif (nodeCacheSize > this._heapLimit) {\n\t\t\tlet deleteCount = 0;\n\n\t\t\tconst queueArr = this._mongoQueue.filter(a => a.cacheId && !a.running && !a.cbs.length);\n\n\t\t\tfor (let zz = queueArr.length - 1; zz >= 0; zz--) {\n\t\t\t\tthis._debugRemoveCacheHits += 1;\n\n\t\t\t\tlet queue = queueArr[zz];\n\n\t\t\t\tthis._nodeCache.del(queue.cacheId);\n\t\t\t\tqueue.cacheId = 0;\n\n\t\t\t\tif (this._mongoQueue.map(a => a._id).indexOf(queue._id) >= 0) {\n\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(queue._id), 1);\n\t\t\t\t}\n\n\t\t\t\tdeleteCount += 1;\n\n\t\t\t\tnodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\t\tif (nodeCacheSize < this._heapLimit * 0.75) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tconsole.log('Query Cache: ' + 'Too Big, - Deleted: ' + deleteCount + ' - ' + nodeCacheSize);\n\t\t}\n\n\t\tthis._nodeCache.set(id, JSON.stringify(data));\n\t}\n\n\tpublic invalidateQueryCache(collection: string) {\n\t\tlet queueArr = this._mongoQueue.filter(a => (a.name_collection === collection || a.lookup_collections.includes(collection)));\n\t\tfor (let i = queueArr.length - 1; i >= 0; i--) {\n\t\t\tlet queue = queueArr[i];\t\t\t\n\t\t\tif (queue.cacheId) {\n\t\t\t\tthis._nodeCache.del(queue.cacheId);\n\t\t\t\tqueue.cacheId = 0;\n\t\t\t}\n\n\t\t\tif (queue.running) {\n\t\t\t\tqueue.invalidateFlag = true;\n\t\t\t\tqueue.invalidateCount += 1;\n\t\t\t}\n\t\t\telse if (!queue.cbs.length) {\n\t\t\t\tif (this._mongoQueue.map(a => a._id).indexOf(queue._id) >= 0) {\n\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(queue._id), 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class MongoManagerModel<T extends CollectionDocument> {\n\tcollection_main: MongoManagerCollection<T> | MongoManagerUserCollection<T> = null;\n\tcollection_version: MongoManagerCollection<T> | MongoManagerUserCollection<T> = null;\n\n\tconstructor(options: MongoManagerCollectionOptions) {\n\t\tif (options.collectionName === 'users') {\n\t\t\tthis.collection_main = new MongoManagerUserCollection<T>(options);\n\t\t}\n\t\telse {\n\t\t\tthis.collection_main = new MongoManagerCollection<T>(options);\n\t\t}\n\n\t\tif (options.useVersionCollection) {\n\t\t\tthis.collection_main.useVersions = true;\n\t\t\t\n\t\t\tlet versionSchema = deepCopy(options.schema);\n\t\t\tversionSchema._id.type = 'Object';\n\t\t\tversionSchema._id.blackbox = true;\n\n\t\t\tlet versionOptions: MongoManagerCollectionOptions = {\n\t\t\t\tcollectionName: options.collectionName + '.versions',\n\t\t\t\tschema: versionSchema,\n\t\t\t\tuseVersionCollection: false,\n\t\t\t\tuseReportBuilder: false,\n\t\t\t\treportBuilderLookupTables: [],\n\t\t\t\ttimestamps: true,\n\t\t\t\tcreateLogs: false,\n\t\t\t\tcheckSchema: false,\n\t\t\t\tcollectionOptions: null\n\t\t\t};\n\n\t\t\tif (options.collectionName === 'users') {\t\n\t\t\t\tthis.collection_version = new MongoManagerUserCollection<T>(versionOptions);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.collection_version = new MongoManagerCollection<T>(versionOptions);\n\t\t\t}\n\n\t\t\tthis.collection_version.createIndex({'_id._id': 1, '_id.__v': 1});\n\t\t\tthis.collection_main.versionCollection = options.collectionName + '.versions';\n\t\t}\n\t}\n}\n\nexport interface MongoManagerCollectionOptions {\n\tcollectionName: string;\n\tschema: object;\n\tuseVersionCollection: boolean;\n\tuseReportBuilder: boolean;\n\treportBuilderLookupTables: LookupTables[]\n\ttimestamps: boolean;\n\tcreateLogs: boolean;\n\tcheckSchema: boolean;\n\tcollectionOptions: CreateCollectionOptions;\n}\n\nexport class MongoManagerCollection<T extends CollectionDocument> {\n\tcollectionName = '';\n\tcheckSchema = false;\n\tsimplschema = null;\n\trbSchema = null;\n\ttimestamps = false;\n\tuseVersions = false;\n\tversionCollection = '';\n\tcreateLogs = true;\n\tuseRB = false;\n\tcollectionOptions: CreateCollectionOptions;\n\t\n\tconstructor(options: MongoManagerCollectionOptions) {\n\t\tthis.collectionName = options.collectionName;\n\t\tthis.simplschema = new SimpleSchema(options.schema);\n\t\tthis.timestamps = options.timestamps;\n\t\tthis.createLogs = options.createLogs;\n\t\tthis.checkSchema = options.checkSchema;\n\t\tthis.collectionOptions = options.collectionOptions;\n\n\t\tif (options.useReportBuilder) {\n\t\t\tthis.useRB = true;\n\t\t\tlet schemaCopy = deepCopy(options.schema);\n\t\t\tlet rbSchema = buildRbLookups(options.reportBuilderLookupTables, schemaCopy, []);\n\t\t\tthis.rbSchema = buildRbSchema(rbSchema);\n\t\t}\n\n\t\tlet interval = setInterval(() => {\n\t\t\tif (ResolveIOServer && ResolveIOServer.getMainServer() && ResolveIOServer.getMongoManager() && ResolveIOServer.getMongoManager().getServerCollections().length) {\n\t\t\t\tResolveIOServer.getMongoManager().registerCollection(this);\n\t\t\t\tclearInterval(interval);\n\t\t\t}\n\t\t}, 1);\n\t}\n\n\tprivate static indexQueue = async.queue(async (task, callback) => {\n const { action, collection, specs, options } = task;\n \n const dbCollection = ResolveIOServer.getMainDB().collection(collection.collectionName, collection.collectionOptions);\n \n if (!dbCollection) {\n return callback(new Error(`Collection ${collection.collectionName} not found`));\n }\n\n let monitor = new MonitorMongo(action, collection.collectionName, JSON.stringify([specs, options]));\n\n const createIndex = async () => {\n try {\n const result = await dbCollection[action](...specs, options);\n monitor.finish();\n callback(null, result);\n } catch (err) {\n if (err.code === 85 || err.message.includes('IndexOptionsConflict')) {\n try {\n const existingIndexName = collection.extractIndexNameFromError(err.message);\n if (existingIndexName) {\n await dbCollection.dropIndex(existingIndexName);\n return await createIndex();\n }\n } catch (innerError) {\n callback(innerError);\n }\n }\n monitor.finish();\n callback(err);\n }\n };\n\n await createIndex();\n }, 1);\n\n // Method to extract index name from error message\n extractIndexNameFromError(errorMessage) {\n\t\tlet regexPattern = /Index already exists with a different name: (\\S+)/;\n\t\tlet matches = errorMessage.match(regexPattern);\n\t\n\t\tif (!matches || matches.length <= 1) {\n\t\t\t// If the first pattern doesn't match, try the second pattern\n\t\t\tregexPattern = /existing index:.*name: \"([^\"]+)\"/;\n\t\t\tmatches = errorMessage.match(regexPattern);\n\t\t}\n\t\n\t\treturn matches && matches.length > 1 ? matches[1] : null;\n\t}\t\n\n\taggregate(pipeline: object[], options?: AggregateOptions, skipCache = false) : Promise<any[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t// if (!skipCache) {\n\t\t\t// \tResolveIOServer.getMongoManager().addToQueue({\n\t\t\t// \t\t_id: 0,\n\t\t\t// \t\tname_collection: this.collectionName,\n\t\t\t// \t\tname_function: 'aggregate',\n\t\t\t// \t\tname_function_addt: 'toArray',\n\t\t\t// \t\tdata_function: [pipeline, options],\n\t\t\t// \t\tdata_function_addt: [],\n\t\t\t// \t\tcbs: [(err, res, cached) => {\n\t\t\t// \t\t\tif (err) {\n\t\t\t// \t\t\t\treject(err);\n\t\t\t// \t\t\t}\n\t\t\t// \t\t\telse {\n\t\t\t// \t\t\t\tresolve(res);\n\t\t\t// \t\t\t}\n\t\t\t// \t\t}],\n\t\t\t// \t\tcbs_next: [],\n\t\t\t// \t\trunning: false,\n\t\t\t// \t\tcacheId: 0,\n\t\t\t// \t\tlookup_collections: pipeline.filter(a => a['$lookup'] && a['$lookup'].from).map(a => a['$lookup'].from).filter((elem, index, self) => {\n\t\t\t// \t\t\treturn index === self.indexOf(elem);\n\t\t\t// \t\t}),\n\t\t\t// \t\tinvalidateFlag: false,\n\t\t\t// \t\tinvalidateCount: 0\n\t\t\t// \t});\n\t\t\t// }\n\t\t\t// else {\n\t\t\t// \tlet monitor = new MonitorMongo('aggregate', this.collectionName, JSON.stringify([pipeline, options]));\n\t\t\t// \tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).toArray().then(res => {\n\t\t\t// \t\tmonitor.finish();\n\t\t\t// \t\tresolve(res);\n\t\t\t// \t}, err => {\n\t\t\t// \t\tmonitor.finish();\n\t\t\t// \t\tconsole.log(new Date(), 'Error Aggregate', this.collectionName, pipeline, options, err);\n\t\t\t// \t\treject(err);\n\t\t\t// \t});\n\t\t\t// }\n\n\t\t\tlet monitor = new MonitorMongo('aggregate', this.collectionName, JSON.stringify([pipeline, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).toArray().then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Aggregate', this.collectionName, pipeline, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\taggregateCount(pipeline: object[], options?: AggregateOptions) : Promise<number> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tResolveIOServer.getMongoManager().addToQueue({\n\t\t\t\t_id: 0,\n\t\t\t\tname_collection: this.collectionName,\n\t\t\t\tname_function: 'aggregate',\n\t\t\t\tname_function_addt: 'count',\n\t\t\t\tdata_function: [pipeline, options],\n\t\t\t\tdata_function_addt: [],\n\t\t\t\tcbs: [(err, res, cached) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t}\n\t\t\t\t}],\n\t\t\t\tcbs_next: [],\n\t\t\t\trunning: false,\n\t\t\t\tcacheId: 0,\n\t\t\t\tlookup_collections: pipeline.filter(a => a['$lookup'] && a['$lookup'].from).map(a => a['$lookup'].from).filter((elem, index, self) => {\n\t\t\t\t\treturn index === self.indexOf(elem);\n\t\t\t\t}),\n\t\t\t\tinvalidateFlag: false,\n\t\t\t\tinvalidateCount: 0\n\t\t\t});\n\t\t});\n\t}\n\n\taggregateCursor(pipeline: object[], options?: AggregateOptions): AggregationCursor {\n\t\tlet monitor = new MonitorMongo('aggregateCursor', this.collectionName, JSON.stringify([pipeline, options]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options);\n\t\tcursor.on('close', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn cursor;\n\t}\n\n\taggregateStream(pipeline: object[], options?: AggregateOptions, streamOptions?: CursorStreamOptions) {\n\t\tlet monitor = new MonitorMongo('aggregateStream', this.collectionName, JSON.stringify([pipeline, options, streamOptions]));\n\t\tlet stream = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).stream(streamOptions);\n\t\tstream.on('end', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t})\n\t\t.on('error', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t})\n\t\t.on('close', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn stream;\n\t}\n\n\t// bulkWrite(operations: AnyBulkWriteOperation<T>[], options: BulkWriteOptions): Promise<BulkWriteResult> {\n\tbulkWrite(operations: any[], options?: BulkWriteOptions, bypassLogs = false, bypassCheckSchema = false): Promise<BulkWriteResult> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!operations.length) {\n\t\t\t\tresolve(null);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst logs = [];\n\t\t\tconst versionOps = []; // For storing versioning ops\n\t\t\tconst deleteOldVersionsOps = []; // For deleteMany operations to remove older versions\n\t\t\tconst bulkOps = [];\n\t\t\tconst updateFilters = [];\n\t\t\tconst updateManyFilters = [];\n\t\t\tconst deleteManyFilters = [];\n\t\n\t\t\t// Collect filters for all operations\n\t\t\toperations.forEach(op => {\n\t\t\t\tconst opType = Object.keys(op)[0];\n\t\t\t\tif (opType === 'updateOne' || opType === 'deleteOne' || opType === 'replaceOne') {\n\t\t\t\t\tupdateFilters.push(op[opType].filter); // Store filters for updateOne, deleteOne, and replaceOne\n\t\t\t\t}\n\t\t\t\telse if (opType === 'updateMany') {\n\t\t\t\t\tupdateManyFilters.push(op[opType].filter); // Store the entire filter for updateMany\n\t\t\t\t}\n\t\t\t\telse if (opType === 'deleteMany') {\n\t\t\t\t\tdeleteManyFilters.push(op[opType].filter); // Store the entire filter for deleteMany\n\t\t\t\t}\n\t\t\t});\n\t\n\t\t\t// Pre-fetch all documents based on the filters before proceeding with the bulk operations\n\t\t\tconst currentDocs = updateFilters.length || updateManyFilters.length || deleteManyFilters.length\n\t\t\t\t? await this.find(<any>{ $or: [...updateFilters, ...updateManyFilters, ...deleteManyFilters] })\n\t\t\t\t: [];\n\n\t\t\t// Helper function to get the value from a document using a dot-notated key (e.g., 'obj.property')\n\t\t\t// This will also handle arrays of objects (e.g., 'obj.arrayOfObjects.property')\n\t\t\tconst getNestedValue = (doc, key) => {\n\t\t\t\tconst parts = key.split('.');\n\n\t\t\t\treturn parts.reduce((acc, part) => {\n\t\t\t\t\tif (Array.isArray(acc)) {\n\t\t\t\t\t\t// If we're dealing with an array, return an array of values for each element\n\t\t\t\t\t\treturn acc.map(item => item[part]).filter(val => val !== undefined);\n\t\t\t\t\t}\n\t\t\t\t\treturn acc && acc[part];\n\t\t\t\t}, doc);\n\t\t\t};\n\t\n\t\t\t// Helper function to locally find matching documents based on filter\n\t\t\tconst findMatchingDocs = (filter) => {\n\t\t\t\treturn currentDocs.filter(doc => {\n\t\t\t\t\treturn matchDocument(filter, doc);\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tconst matchDocument = (filter, doc) => {\n\t\t\t\treturn Object.keys(filter).every(key => {\n\t\t\t\t\tconst value = filter[key];\n\t\t\t\t\tconst docValue = getNestedValue(doc, key); // Get nested value from the document\n\t\t\t\n\t\t\t\t\t// Handle logical operators\n\t\t\t\t\tif (key === '$and') {\n\t\t\t\t\t\treturn value.every(subFilter => matchDocument(subFilter, doc));\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\tif (key === '$or') {\n\t\t\t\t\t\treturn value.some(subFilter => matchDocument(subFilter, doc));\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\t// If docValue is an array, apply filter conditions to each element\n\t\t\t\t\tif (Array.isArray(docValue)) {\n\t\t\t\t\t\treturn docValue.some(val => evaluateCondition(value, val));\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\t// Otherwise, apply the condition to the single value\n\t\t\t\t\treturn evaluateCondition(value, docValue);\n\t\t\t\t});\n\t\t\t};\n\t\t\t\n\t\t\t// Helper function to evaluate the condition (value) against the document value (docValue)\n\t\t\tconst evaluateCondition = (condition, docValue) => {\n\t\t\t\t// If condition is an object, handle operators like $in, $nin, $ne, etc.\n\t\t\t\tif (condition instanceof Object) {\n\t\t\t\t\tif ('$in' in condition) {\n\t\t\t\t\t\treturn condition.$in.includes(docValue);\n\t\t\t\t\t}\n\t\t\t\t\tif ('$nin' in condition) {\n\t\t\t\t\t\treturn !condition.$nin.includes(docValue);\n\t\t\t\t\t}\n\t\t\t\t\tif ('$ne' in condition) {\n\t\t\t\t\t\treturn docValue !== condition.$ne;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$gt' in condition) {\n\t\t\t\t\t\treturn docValue > condition.$gt;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$gte' in condition) {\n\t\t\t\t\t\treturn docValue >= condition.$gte;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$lt' in condition) {\n\t\t\t\t\t\treturn docValue < condition.$lt;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$lte' in condition) {\n\t\t\t\t\t\treturn docValue <= condition.$lte;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$exists' in condition) {\n\t\t\t\t\t\treturn (docValue !== undefined) === condition.$exists;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$regex' in condition) {\n\t\t\t\t\t\tconst regex = new RegExp(condition.$regex, condition.$options || '');\n\t\t\t\t\t\treturn regex.test(docValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// Handle regular equality comparison\n\t\t\t\treturn docValue === condition;\n\t\t\t};\n\t\n\t\t\tfor (const op of operations) {\n\t\t\t\tconst opType = Object.keys(op)[0];\n\t\t\t\tlet doc = op[opType];\n\t\n\t\t\t\tif (opType === 'insertOne') {\n\t\t\t\t\t// Ensure _id and __v for insertOne operations\n\t\t\t\t\tif (!doc.document._id) {\n\t\t\t\t\t\tdoc.document._id = objectIdHexString();\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this.useVersions && !doc.document.hasOwnProperty('__v')) {\n\t\t\t\t\t\tdoc.document.__v = 0;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tlet date = new Date();\n\n\t\t\t\t\t\tif (!doc.document.createdAt) {\n\t\t\t\t\t\t\tdoc.document.createdAt = date;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!doc.document.updatedAt) {\n\t\t\t\t\t\t\tdoc.document.updatedAt = date;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\tconst isValid = validation.validate(doc.document);\n\t\t\n\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - insertOne', validation.validationErrors());\n\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite insertOne - ' + this.collectionName, [validation.validationErrors(), doc.document]);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t// Log the operation\n\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: doc.document._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options])) < 200000 ? JSON.stringify([op, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\tbulkOps.push(op); // Add insertOne operation to bulkOps\n\t\t\t\t} \n\t\t\t\telse if (opType === 'updateOne') {\t\n\t\t\t\t\t// Find all matching documents locally based on filter\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\n\t\t\t\t\tif (matchingDocs.length) {\n\t\t\t\t\t\tfor (let currentDoc of matchingDocs) {\n\t\t\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\t\t\tif (doc.update.$set) {\n\t\t\t\t\t\t\t\t\tdoc.update.$set.updatedAt = new Date();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tdoc.update.$set = { updatedAt: new Date() };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\t\tconst isValid = validation.validate(doc.update, {modifier: true});\n\t\t\t\t\n\t\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - updateOne', validation.validationErrors());\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite updateOne - ' + this.collectionName, [validation.validationErrors(), doc.update, currentDoc]);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\n\t\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, '__v')) {\n\t\t\t\t\t\t\t\t\tif (!doc.update.$inc) {\n\t\t\t\t\t\t\t\t\t\tdoc.update.$inc = { __v: 1 };\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tdoc.update.$inc.__v = 1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\t\tid_document: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, currentDoc])) < 200000 ? JSON.stringify([op, options, currentDoc], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\tbulkOps.push(op); // Add updateOne or replaceOne operation to bulkOps\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (doc.upsert) {\n\t\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\t\tconst isValid = validation.validate(doc.update, {modifier: true});\n\t\t\t\t\n\t\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - updateOne', validation.validationErrors());\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite updateOne - ' + this.collectionName, [validation.validationErrors(), doc.update]);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, '_id')) {\n\t\t\t\t\t\t\t\tdoc.update.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, '__v')) {\n\t\t\t\t\t\t\t\t\tdoc.update.$setOnInsert.__v = 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n \n\t\t\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, 'createdAt')) {\n\t\t\t\t\t\t\t\t\tdoc.update.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, 'updatedAt')) {\n\t\t\t\t\t\t\t\t\tdoc.update.$setOnInsert.updatedAt = new Date();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\t\tid_document: doc.update.$setOnInsert._id,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, doc.update])) < 200000 ? JSON.stringify([op, options, doc.update], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\tbulkOps.push(op); // Add updateOne or replaceOne operation to bulkOps\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (opType === 'replaceOne') {\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tdoc.replacement.updatedAt = new Date();\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Find all matching documents locally based on filter\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\n\t\t\t\t\tif (matchingDocs.length) {\n\t\t\t\t\t\tfor (let currentDoc of matchingDocs) {\n\t\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\t\tconst isValid = validation.validate(doc.replacement);\n\t\t\t\t\n\t\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - insertOne', validation.validationErrors());\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite replaceOne - ' + this.collectionName, [validation.validationErrors(), doc.replacement]);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\t\t\tdoc.replacement.__v = versionDoc.__v + 1;\n\t\t\n\t\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\t\tid_document: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, currentDoc])) < 200000 ? JSON.stringify([op, options, currentDoc], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\tbulkOps.push(op); // Add updateOne or replaceOne operation to bulkOps\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (doc.upsert) {\n\t\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\t\tconst isValid = validation.validate(doc.replacement);\n\t\t\t\t\n\t\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - replaceOne', validation.validationErrors());\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite replaceOne - ' + this.collectionName, [validation.validationErrors(), doc.replacement]);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.replacement, '_id')) {\n\t\t\t\t\t\t\t\tdoc.replacement._id = objectIdHexString();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.replacement, '__v')) {\n\t\t\t\t\t\t\t\t\tdoc.replacement.__v = 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n \n\t\t\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.replacement, 'createdAt')) {\n\t\t\t\t\t\t\t\t\tdoc.replacement.createdAt = new Date();\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.replacement, 'updatedAt')) {\n\t\t\t\t\t\t\t\t\tdoc.replacement.updatedAt = new Date();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\t\tid_document: doc.replacement._id,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, doc.replacement])) < 200000 ? JSON.stringify([op, options, doc.replacement], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\tbulkOps.push(op); // Add updateOne or replaceOne operation to bulkOps\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (opType === 'deleteOne') {\n\t\t\t\t\t// Find all matching documents locally based on filter\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\t\t\t\t\n\t\t\t\t\tmatchingDocs.forEach(currentDoc => {\n\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\tid_document: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, currentDoc])) < 200000 ? JSON.stringify([op, options, currentDoc], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tbulkOps.push(op); // Add deleteOne operation to bulkOps\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse if (opType === 'updateMany') {\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tif (doc.update.$set) {\n\t\t\t\t\t\t\tdoc.update.$set.updatedAt = new Date();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdoc.update.$set = {\n\t\t\t\t\t\t\t\tupdatedAt: new Date()\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, '__v')) {\n\t\t\t\t\t\t\tif (!doc.update.$inc) {\n\t\t\t\t\t\t\t\tdoc.update.$inc = { __v: 1 };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tdoc.update.$inc.__v = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Process all documents matching the updateMany filter locally\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\n\t\t\t\t\tfor (let currentDoc of matchingDocs) {\n\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\tconst isValid = validation.validate(doc.update, {modifier: true});\n\t\t\t\n\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - insertOne', validation.validationErrors());\n\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite updateMany - ' + this.collectionName, [validation.validationErrors(), doc.update]);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\n\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\tid_document: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options])) < 200000 ? JSON.stringify([op, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tbulkOps.push(op); // Add updateMany operation to bulkOps\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (opType === 'deleteMany') {\n\t\t\t\t\t// Process all documents matching the deleteMany filter locally\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\n\t\t\t\t\tmatchingDocs.forEach(currentDoc => {\n\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\n\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\tid_document: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options])) < 200000 ? JSON.stringify([op, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tbulkOps.push(op); // Add deleteMany operation to bulkOps\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\ttry {\n\t\t\t\tif (bulkOps.length) {\n\t\t\t\t\tlet monitor = new MonitorMongo('bulkWrite', this.collectionName, JSON.stringify([bulkOps.slice(-100), options]));\n\t\t\t\t\t\n\t\t\t\t\t// First, perform the main bulk operations on the collection\n\t\t\t\t\tconst mainResult = await ResolveIOServer.getMainDB().collection<T>(this.collectionName).bulkWrite(bulkOps, options);\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\n\t\t\t\t\t// Separate bulkWrite for versions (if any versioning is required)\n\t\t\t\t\tif (versionOps.length || deleteOldVersionsOps.length) {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection<T>(this.versionCollection).bulkWrite([...versionOps, ...deleteOldVersionsOps]);\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\t// Separate bulkWrite for logs (if logging is enabled)\n\t\t\t\t\tif (!bypassLogs && logs.length) {\n\t\t\t\t\t\tawait Logs.bulkWrite(logs);\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\tmonitor.finish();\n\t\n\t\t\t\t\tresolve(mainResult); // Resolve with the result of the main bulkWrite\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconsole.log(new Date(), 'Error Bulk Write', this.collectionName, bulkOps.slice(-100), options, err);\n\t\t\t\treject(err);\n\t\t\t}\n\t\t});\n\t}\n\n\tcountDocuments(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: CountDocumentsOptions): Promise<number> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('countDocuments', this.collectionName, JSON.stringify([filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).countDocuments(<any>filter, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Count Documents', this.collectionName, filter, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\t//Helper Function (1 or Many) - Not Real Mongo Function\n\tcreate(f_docs: T | T[], options?: InsertOneOptions | BulkWriteOptions): Promise<T | T[]> {\n\t\tif (!Array.isArray(f_docs)) {\n\t\t\treturn this.insertOne(f_docs, <InsertOneOptions>options);\n\t\t}\n\t\telse if (f_docs.length === 1) {\n\t\t\treturn this.insertOne(f_docs[0], <InsertOneOptions>options);\n\t\t}\n\n\t\treturn this.insertMany(f_docs, <BulkWriteOptions>options);\n\t}\n\n\tcreateIndex(fieldOrSpec: any, options?: CreateIndexesOptions): Promise<string> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tMongoManagerCollection.indexQueue.push({\n\t\t\t\taction: 'createIndex',\n\t\t\t\tcollection: this, // Current instance\n\t\t\t\tspecs: [fieldOrSpec],\n\t\t\t\toptions: options\n\t\t\t}, (err, result) => {\n\t\t\t\tif (err) reject(err);\n\t\t\t\telse resolve(result);\n\t\t\t});\n\t\t});\n\t}\n\t\n\tcreateIndexes(indexSpecs: IndexDescription[], options?: CreateIndexesOptions): Promise<string[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tMongoManagerCollection.indexQueue.push({\n\t\t\t\taction: 'createIndexes',\n\t\t\t\tcollection: this, // Current instance\n\t\t\t\tspecs: [indexSpecs],\n\t\t\t\toptions: options\n\t\t\t}, (err, result) => {\n\t\t\t\tif (err) reject(err);\n\t\t\t\telse resolve(result);\n\t\t\t});\n\t\t});\n\t}\n\n\tdeleteMany(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: DeleteOptions, bypassLogs = false): Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tlet docs = await this.find(filter);\n\n\t\t\t\tfor (let i = 0; i < docs.length; i++) {\n\t\t\t\t\tlet doc = docs[i];\n\t\t\t\t\n\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'deleteMany',\n\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\troute: ''\n\t\t\t\t\t});\n\n\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 1}}]});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('deleteMany', this.collectionName, JSON.stringify([filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).deleteMany(<any>filter, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\tresolve(res.deletedCount);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Delete Many', this.collectionName, filter, options, err);\n\t\t\t\treject(err)\n\t\t\t});\n\t\t});\n\t}\n\n\tdeleteOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOneAndDeleteOptions, bypassLogs = false): Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tlet monitor = new MonitorMongo('findOneAndDelete', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndDelete(<any>filter, options).then(async returnVal => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tlet doc = returnVal;\n\n\t\t\t\t\tif (doc) {\n\t\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'deleteOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\t\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 1}}]});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\n\t\t\t\t\t\tresolve(1);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresolve(0);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Find One And Delete', this.collectionName, filter, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = new MonitorMongo('deleteOne', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).deleteOne(<any>filter, options).then(res => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\tresolve(res.deletedCount);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Delete One', this.collectionName, filter, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\t\t\t\n\t\t});\n\t}\n\n\tdistinct(key: string, filter?: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, options?: CommandOperationOptions): Promise<T[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('distinct', this.collectionName, JSON.stringify([key, filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).distinct(key, <any>filter, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Distinct', this.collectionName, filter, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tdrop(options?: CommandOperationOptions): Promise<boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('drop', this.collectionName, JSON.stringify([options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).drop(options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Count Documents', this.collectionName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tdropIndex(indexName: string, options?: CommandOperationOptions): Promise<Document> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('dropIndex', this.collectionName, JSON.stringify([indexName, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).dropIndex(indexName, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(<Document>res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Drop Index', this.collectionName, indexName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tdropIndexes(options?: CommandOperationOptions): Promise<Boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('dropIndexes', this.collectionName, JSON.stringify([options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).dropIndexes(options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Drop Indexes', this.collectionName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tfind(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, skipCache = false): Promise<T[]> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().addToQueue({\n\t\t\t\t\t_id: 0,\n\t\t\t\t\tname_collection: this.collectionName,\n\t\t\t\t\tname_function: 'find',\n\t\t\t\t\tname_function_addt: 'toArray',\n\t\t\t\t\tdata_function: [filter, options],\n\t\t\t\t\tdata_function_addt: [],\n\t\t\t\t\tcbs: [(err, res, cached) => {\t\t\t\t\t\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t\t}\n\t\t\t\t\t}],\n\t\t\t\t\tcbs_next: [],\n\t\t\t\t\trunning: false,\n\t\t\t\t\tcacheId: 0,\n\t\t\t\t\tlookup_collections: [],\n\t\t\t\t\tinvalidateFlag: false,\n\t\t\t\t\tinvalidateCount: 0\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = new MonitorMongo('find', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find<T>(<any>filter, options).toArray().then(res => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Find', this.collectionName, filter, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tfindById(id: string, options?: FindOptions<T>): Promise<T> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('findById', this.collectionName, JSON.stringify([{_id: id}, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOne<T>(<any>{_id: id}, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find By Id', this.collectionName, {_id: id}, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tfindCount(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>): Promise<Number> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('findCount', this.collectionName, JSON.stringify([filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options).count().then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find Count', this.collectionName, filter, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tfindCursor(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>): FindCursor {\n\t\tlet monitor = new MonitorMongo('findCursor', this.collectionName, JSON.stringify([filter, options]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options);\n\t\tcursor.on('close', ev => {\n\t\t\tmonitor.finish();\n\t\t\tcursor.removeAllListeners();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn cursor;\n\t}\n\n\tfindStream(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, streamOptions?: CursorStreamOptions) {\n\t\tlet monitor = new MonitorMongo('findStream', this.collectionName, JSON.stringify([filter, options, streamOptions]));\n\t\tlet stream = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options).stream(streamOptions);\n\t\tstream.on('end', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t})\n\t\t.on('error', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t})\n\t\t.on('close', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn stream;\n\t}\n\n\tfindOne(filter: MongoManagerFilter<T> | MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, skipCache = false): Promise<T> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().addToQueue({\n\t\t\t\t\t_id: 0,\n\t\t\t\t\tname_collection: this.collectionName,\n\t\t\t\t\tname_function: 'findOne',\n\t\t\t\t\tname_function_addt: '',\n\t\t\t\t\tdata_function: [filter, options],\n\t\t\t\t\tdata_function_addt: [],\n\t\t\t\t\tcbs: [(err, res, cached) => {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t\t}\n\t\t\t\t\t}],\n\t\t\t\t\tcbs_next: [],\n\t\t\t\t\trunning: false,\n\t\t\t\t\tcacheId: 0,\n\t\t\t\t\tlookup_collections: [],\n\t\t\t\t\tinvalidateFlag: false,\n\t\t\t\t\tinvalidateCount: 0\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = new MonitorMongo('findOne', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOne<T>(<any>filter, options).then(res => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Find One', this.collectionName, filter, options, err);\n\t\t\t\t\treject(err)\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tfindOneAndDelete(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOneAndDeleteOptions, bypassLogs = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('findOneAndDelete', this.collectionName, JSON.stringify([filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndDelete(<any>filter, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tlet doc = res;\n\t\t\t\t\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndDelete',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t}\n\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\n\t\t\t\t\tresolve(<T>doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find One And Delete', this.collectionName, filter, options, err);\n\t\t\t\treject(err)\n\t\t\t});\n\t\t});\n\t}\n\n\tfindOneAndReplace(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, replacement: T, options?: FindOneAndReplaceOptions, bypassLogs = false, bypassCheckSchema = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(replacement);\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - findOneAndReplace', validation.validationErrors());\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on findOneAndReplace - ' + this.collectionName, [validation.validationErrors(), replacement]);\n\t\t\t\t\t\n\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tlet date = new Date();\n\n\t\t\tif (this.timestamps) {\n\t\t\t\treplacement.updatedAt = date;\n\t\t\t}\n\n\t\t\tif (options && options.upsert) {\n\t\t\t\tif (!replacement._id) {\n\t\t\t\t\treplacement._id = objectIdHexString();\n\t\t\t\t}\n\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\treplacement.__v = 0;\n\t\t\t\t}\n\n\t\t\t\tif (this.timestamps && !replacement.createdAt) {\n\t\t\t\t\treplacement.createdAt = date;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('findOneAndReplace', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndReplace(<any>filter, replacement, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tlet doc = res;\n\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndReplace',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t}\n\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\n\t\t\t\t\tresolve(<T>doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find One And Replace', this.collectionName, filter, options, err);\n\t\t\t\treject(err)\n\t\t\t});\n\t\t});\n\t}\n\n\tfindOneAndUpdate(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, update: MongoManagerUpdateFilter<T>, options?: FindOneAndUpdateOptions, bypassLogs = false, bypassCheckSchema = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - findOneAndUpdate', validation.validationErrors());\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on findOneAndUpdate - ' + this.collectionName, [validation.validationErrors(), update]);\n\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.timestamps) {\n\t\t\t\tlet date = new Date(); \n\t\t\t\t\n\t\t\t\tif (!update.$set) {\n\t\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options && options.upsert) {\n\t\t\t\tif (!update.$setOnInsert) {\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t_id: objectIdHexString()\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (!update.$setOnInsert._id) {\n\t\t\t\t\t\tupdate.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.timestamps && !update.$setOnInsert.createdAt) {\n\t\t\t\t\t\tupdate.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('findOneAndUpdate', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndUpdate(<any>filter, <any>update, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tlet doc = res;\n\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\t\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndUpdate',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t}\n\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\n\t\t\t\t\tresolve(<T>doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find One And Update', this.collectionName, filter, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tindexes(options: IndexInformationOptions): Promise<any[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('indexes', this.collectionName, JSON.stringify([options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).indexes(options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Indexes', this.collectionName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tindexExists(indexes: string | string[], options?: IndexInformationOptions): Promise<boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('indexExists', this.collectionName, JSON.stringify([indexes, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).indexExists(indexes, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Index Exists', this.collectionName, indexes, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tinsertMany(docs: T[], options?: BulkWriteOptions, bypassLogs = false, bypassCheckSchema = false, bypassMonitor = false): Promise<T[]> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!docs.length) {\n\t\t\t\tresolve([]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tlet validationResults = [];\n\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tdocs.forEach(doc => {\n\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\tconst isValid = validation.validate(doc);\n\n\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - insertMany', validation.validationErrors());\n\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on insertMany - ' + this.collectionName, [validation.validationErrors(), doc]);\n\t\t\t\t\t\tvalidationResults.push(false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvalidationResults.push(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet validDocs = this.checkSchema ? docs.filter((a, idx) => validationResults[idx]) : docs;\n\n\t\t\tfor (let i = 0; i < validDocs.length; i++) {\n\t\t\t\tlet doc = validDocs[i];\n\n\t\t\t\tif (!doc._id) {\n\t\t\t\t\tdoc._id = objectIdHexString();\n\t\t\t\t}\n\n\t\t\t\tif (this.timestamps) {\n\t\t\t\t\tlet date = new Date();\n\n\t\t\t\t\tif (!doc.createdAt) {\n\t\t\t\t\t\tdoc.createdAt = date;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!doc.updatedAt) {\n\t\t\t\t\t\tdoc.updatedAt = date;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.useVersions && !doc.hasOwnProperty('__v')) {\n\t\t\t\t\tdoc.__v = 0;\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, options])) < 200000 ? JSON.stringify([doc, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'insertMany',\n\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\troute: ''\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (validDocs.length) {\n\t\t\t\tlet monitor = null;\n\t\t\t\t\n\t\t\t\tif (!bypassMonitor) {\n\t\t\t\t\tmonitor = new MonitorMongo('insertMany', this.collectionName, JSON.stringify([validDocs, options]));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).insertMany(<OptionalUnlessRequiredId<T>[]>validDocs, options).then(res => {\n\t\t\t\t\tif (monitor) {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t}\n\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\tresolve(validDocs);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tif (monitor) {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t}\n\t\t\t\t\tconsole.log(new Date(), 'Error Insert Many', this.collectionName, validDocs, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tinsertOne(doc: T, options?: InsertOneOptions, bypassLogs = false, bypassCheckSchema = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!doc._id) {\n\t\t\t\tdoc._id = objectIdHexString();\n\t\t\t}\n\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(doc);\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - insertOne', validation.validationErrors());\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on insertOne - ' + this.collectionName, [validation.validationErrors(), doc]);\n\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.timestamps) {\n\t\t\t\tlet date = new Date();\n\t\t\t\n\t\t\t\tif (!doc.createdAt) {\n\t\t\t\t\tdoc.createdAt = date;\n\t\t\t\t}\n\n\t\t\t\tif (!doc.updatedAt) {\n\t\t\t\t\tdoc.updatedAt = date;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tLogs.insertOne({\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\ttype: 'document',\n\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, options])) < 200000 ? JSON.stringify([doc, options], null, 2) : 'Too Big',\n\t\t\t\t\tmethod: 'insertOne',\n\t\t\t\t\tid_user: '',\n\t\t\t\t\tuser: '',\n\t\t\t\t\tmessageId: 0,\n\t\t\t\t\troute: ''\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.useVersions && !doc.hasOwnProperty('__v')) {\n\t\t\t\tdoc.__v = 0;\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('insertOne', this.collectionName, JSON.stringify([doc, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).insertOne(<OptionalUnlessRequiredId<T>>doc, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\tresolve(doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Insert One', this.collectionName, doc, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tlistIndexes(options?: ListIndexesOptions): ListIndexesCursor {\n\t\tlet monitor = new MonitorMongo('listIndexes', this.collectionName, JSON.stringify([options]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).listIndexes(options);\n\t\tcursor.on('close', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn cursor;\n\t}\n\n\trename(newName: string, options?: RenameOptions): Promise<Collection<Document>> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('rename', this.collectionName, JSON.stringify([newName, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).rename(newName, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Rename', this.collectionName, newName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\treplaceOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, replacement: T, options?: ReplaceOptions, bypassLogs = false, bypassCheckSchema = false, doc: T = null) : Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(replacement);\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - replaceOne', validation.validationErrors());\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on replaceOne - ' + this.collectionName, [validation.validationErrors(), replacement]);\n\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tlet date = new Date();\n\t\t\t\n\t\t\tif (this.timestamps) {\n\t\t\t\treplacement.updatedAt = date;\n\t\t\t}\n\n\t\t\tif (this.useVersions) {\n\t\t\t\tif (!doc) {\n\t\t\t\t\tdoc = await this.findOne(<any>filter, null, true);\n\t\t\t\t}\n\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.timestamps && !replacement.createdAt && doc.createdAt) {\n\t\t\t\t\t\treplacement.createdAt = doc.createdAt;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (doc.__v === replacement.__v) {\n\t\t\t\t\t\treplacement.__v += 1;\n\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\n\t\t\t\t\t\tif (doc.__v >= 4) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 4}}]});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet monitor = new MonitorMongo('replaceOne', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options).then(res => {\n\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\tconsole.log(new Date(), 'Error Replace One', this.collectionName, filter, replacement, options, err);\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tconsole.log('invalid version - ' + this.collectionName, doc.__v, replacement.__v);\n\n\t\t\t\t\t\tlet prevDoc = await ResolveIOServer.getMongoManager().collection(this.versionCollection).findOne({\n\t\t\t\t\t\t\t_id: <any>{\n\t\t\t\t\t\t\t\t_id: doc._id,\n\t\t\t\t\t\t\t\t__v: replacement.__v\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, null, true);\n\n\t\t\t\t\t\tif (prevDoc) {\n\t\t\t\t\t\t\tlet docId = doc._id;\n\t\t\t\t\t\t\tlet docVersion = doc.__v;\n\t\t\t\t\t\t\tlet updatedDoc: T = getMongoMergeUpdatedDoc(replacement, doc, prevDoc);\n\t\t\t\t\t\t\tupdatedDoc._id = docId;\n\t\t\t\t\t\t\tupdatedDoc.__v = docVersion + 1;\n\n\t\t\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: docId,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, options])) < 200000 ? JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet monitor = new MonitorMongo('replaceOne', this.collectionName, JSON.stringify([filter, updatedDoc, options]));\n\t\t\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, updatedDoc, options).then(res => {\n\t\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Error Replace One', this.collectionName, filter, updatedDoc, options, err);\n\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject('Invalid Version And Could Not Find History - DB: ' + doc.__v + ', Trying to update with :' + replacement.__v);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (options && options.upsert) {\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\treplacement.createdAt = date;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!replacement._id) {\n\t\t\t\t\t\treplacement._id = objectIdHexString();\n\t\t\t\t\t}\n\n\t\t\t\t\treplacement.__v = 0;\n\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: replacement._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, options])) < 200000 ? JSON.stringify(['upsert', filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet monitor = new MonitorMongo('replaceOne', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Replace One', this.collectionName, filter, replacement, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject('No Document');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (options && options.upsert) {\n\t\t\t\t\tif (this.timestamps && !replacement.createdAt) {\n\t\t\t\t\t\treplacement.createdAt = date;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!replacement._id) {\n\t\t\t\t\t\treplacement._id = objectIdHexString();\n\t\t\t\t\t}\n\n\t\t\t\t\treplacement.__v = 0;\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (!options) {\n\t\t\t\t\t\toptions = <FindOneAndReplaceOptions>{returnDocument: 'before'};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t(<FindOneAndReplaceOptions>options).returnDocument = 'before';\n\t\t\t\t\t}\n\n\t\t\t\t\tlet monitor = new MonitorMongo('findOneAndReplace', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndReplace(<any>filter, replacement, <FindOneAndReplaceOptions>options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tlet doc = res;\n\n\t\t\t\t\t\tif (doc) {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: replacement._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, options])) < 200000 ? JSON.stringify(['upsert', filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\tresolve(1);\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Find One And Replace', this.collectionName, filter, replacement, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet monitor = new MonitorMongo('replaceOne', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Replace One', this.collectionName, filter, replacement, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tupdateMany(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, update: MongoManagerUpdateFilter<T>, options?: UpdateOptions, bypassLogs = false, bypassCheckSchema = false, bypassVersions = false) : Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif ((!update.$inc || JSON.stringify(update.$inc) === '{}') && (!update.$set || JSON.stringify(update.$set) === '{}') && (!update.$setOnInsert || JSON.stringify(update.$setOnInsert) === '{}') && (!update.$unset || JSON.stringify(update.$unset) === '{}')) {\n\t\t\t\tresolve(1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timestamps) {\n\t\t\t\tlet date = new Date();\n\n\t\t\t\tif (!update.$set) {\n\t\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - updateMany', validation.validationErrors());\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on updateMany - ' + this.collectionName, [validation.validationErrors(), update]);\n\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ((this.useVersions && !bypassVersions) || (this.createLogs && !bypassLogs)) {\n\t\t\t\tlet docs = await this.find(filter);\n\t\n\t\t\t\tfor (let i = 0; i < docs.length; i++) {\n\t\t\t\t\tlet doc = docs[i];\n\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateMany',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\t\t\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (doc.__v >= 4) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 4}}]});\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\tif (!objectContainsPropertyDeep(update, '__v')) {\n\t\t\t\t\t\t\tif (!update.$inc) {\n\t\t\t\t\t\t\t\tupdate.$inc = {__v: 1};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (!update.$inc.__v) {\n\t\t\t\t\t\t\t\tupdate.$inc.__v = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('updateMany', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateMany(<any>filter, update, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Update Many', this.collectionName, filter, update, options, err);\n\t\t\t\treject(err)\n\t\t\t});\n\t\t});\n\t}\n\n\tupdateOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, update: MongoManagerUpdateFilter<T>, options?: UpdateOptions, bypassLogs = false, bypassCheckSchema = false) : Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\t\t\t\n\t\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - updateOne', validation.validationErrors());\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on updateOne - ' + this.collectionName, [validation.validationErrors(), update]);\n\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ((!update.$inc || JSON.stringify(update.$inc) === '{}') && (!update.$set || JSON.stringify(update.$set) === '{}') && (!update.$setOnInsert || JSON.stringify(update.$setOnInsert) === '{}') && (!update.$unset || JSON.stringify(update.$unset) === '{}')) {\n\t\t\t\tresolve(1);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet date = new Date();\n\n\t\t\tif (this.timestamps) {\n\t\t\t\tif (!update.$set) {\n\t\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (this.useVersions) {\n\t\t\t\tlet doc = await this.findOne(filter, null, true);\n\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\t\n\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t\n\t\t\t\t\tif (doc.__v >= 4) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 4}}]});\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (!objectContainsPropertyDeep(update, '__v')) {\n\t\t\t\t\t\tif (!update.$inc) {\n\t\t\t\t\t\t\tupdate.$inc = {__v: 1};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (!update.$inc.__v) {\n\t\t\t\t\t\t\tupdate.$inc.__v = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet monitor = new MonitorMongo('updateOne', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Update One', this.collectionName, filter, update, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse if (options && options.upsert) {\n\t\t\t\t\tif (!update.$setOnInsert) {\n\t\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t__v: 0\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (!update.$setOnInsert._id) {\n\t\t\t\t\t\t\tupdate.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (this.timestamps && !update.$setOnInsert.createdAt) {\n\t\t\t\t\t\t\tupdate.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: update.$setOnInsert._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, options])) < 200000 ? JSON.stringify(['upsert', filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet monitor = new MonitorMongo('updateOne', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Update One', this.collectionName, filter, update, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject('No Document');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (options && options.upsert) {\n\t\t\t\t\tif (!update.$setOnInsert) {\n\t\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString()\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (!update.$setOnInsert._id) {\n\t\t\t\t\t\t\tupdate.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (this.timestamps && !update.$setOnInsert.createdAt) {\n\t\t\t\t\t\t\tupdate.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (!options) {\n\t\t\t\t\t\toptions = <FindOneAndUpdateOptions>{returnDocument: 'before'};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t(<FindOneAndUpdateOptions>options).returnDocument = 'before';\n\t\t\t\t\t}\n\n\t\t\t\t\tlet monitor = new MonitorMongo('findOneAndUpdate', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).findOneAndUpdate(<any>filter, update, <FindOneAndUpdateOptions>options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tlet doc = res.value;\n\n\t\t\t\t\t\tif (doc) {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: <any>doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tresolve(res.ok);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (update.$setOnInsert) {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: update.$setOnInsert._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, options])) < 200000 ? JSON.stringify(['upsert', filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\n\t\t\t\t\t\t\tresolve(res.ok);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Find One And Update', this.collectionName, filter, update, options, err);\n\t\t\t\t\t\treject(err)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet monitor = new MonitorMongo('updateOne', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Update One', this.collectionName, filter, update, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t\n\twatchCollection(pipeline = [], options?: ChangeStreamOptions): ChangeStream<T> {\n\t\tlet stream = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).watch(pipeline, options);\n\t\treturn <ChangeStream<T>>stream;\n\t}\n}\n\nexport class MongoManagerUserCollection<T extends CollectionDocument> extends MongoManagerCollection<T> {\n\tauthenticate(user: UserModel, password: string): Promise<{data: UserModel, error: string}> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tconst attemptsInterval = Math.pow(100, Math.log(user.attempts + 1));\n\t\t\tconst calculatedInterval = attemptsInterval < 300000 ? attemptsInterval : 300000;\n\t\t\n\t\t\tif (user.last) {\n\t\t\t\tif (Date.now() - user.last.getTime() < calculatedInterval) {\n\t\t\t\t\tuser.last = new Date();\n\t\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last}});\n\t\t\t\t\tresolve({\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\terror: 'Attempt Too Soon'\n\t\t\t\t\t});\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tuser.last = new Date();\n\t\t\t}\n\t\t\n\t\t\tif (user.attempts >= 5) {\n\t\t\t\tresolve({\n\t\t\t\t\tdata: null,\n\t\t\t\t\terror: 'Too Many Attempts'\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif (!user.salt) {\n\t\t\t\tresolve({\n\t\t\t\t\tdata: null,\n\t\t\t\t\terror: 'No Salt Value Stored'\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tpbkdf2(password, user.salt, {\n\t\t\t\titerations: 25000,\n\t\t\t\tkeylen: 512,\n\t\t\t\tdigestAlgorithm: 'sha256'\n\t\t\t}, async (err, hashBuffer) => {\n\t\t\t\tif (err) {\n\t\t\t\t\treturn reject(err);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tif (scmp(hashBuffer, Buffer.from(user.hash, 'hex'))) {\n\t\t\t\t\tuser.last = new Date();\n\t\t\t\t\tuser.attempts = 0;\n\t\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last, attempts: user.attempts}});\n\n\t\t\t\t\tresolve({\n\t\t\t\t\t\tdata: user,\n\t\t\t\t\t\terror: ''\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tuser.last = new Date();\n\t\t\t\t\tuser.attempts = user.attempts + 1;\n\t\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last, attempts: user.attempts}});\n\n\t\t\t\t\tif (user.attempts >= 5) {\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t\terror: 'Too Many Attempts'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t\terror: 'Invalid Username And Password'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} \n\t\t\t});\n\t\t});\n\t}\n\n\tserializeUser() {\n\t\treturn (user, cb) => {\n\t\t\tcb(null, user.username);\n\t\t};\n\t}\n\n\tdeserializeUser() {\n\t\treturn (username, cb) => {\n\t\t\tUsers.findOne({username: username}).then(res => {\n\t\t\t\tcb(null, res);\n\t\t\t}, err => {\n\t\t\t\tcb(err, null);\n\t\t\t});\n\t\t};\n\t}\n\n\tsetPassword(user: UserModel, password: string) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!user) {\n\t\t\t\treject('No User');\n\t\t\t}\n\t\t\telse if (!password) {\n\t\t\t\treject('No Password');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet saltBuffer = await randomBytes(32);\n\t\t\t\tlet salt = saltBuffer.toString('hex');\n\t\t\t\tlet hashRaw = await pbkdf2Promisified(password, salt, {\n\t\t\t\t\titerations: 25000,\n\t\t\t\t\tkeylen: 512,\n\t\t\t\t\tdigestAlgorithm: 'sha256'\n\t\t\t\t});\n\t\t\t\tlet hash = Buffer.from(hashRaw, 'binary').toString('hex');\n\t\t\t\tUsers.updateOne({_id: user._id}, {$set: {hash: hash, salt: salt, services: {}, attempts: 0}}).then(res => resolve(res), rej => reject(rej));\n\t\t\t}\n\t\t});\n\t};\n\n\tchangePassword(user, oldPassword, newPassword) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!user) {\n\t\t\t\treject('Missing User');\n\t\t\t}\n\t\t\telse if (!oldPassword || !newPassword) {\n\t\t\t\treject('Missing Password');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet authUser = await this.authenticate(user, oldPassword);\n\n\t\t\t\tif (!authUser['data']) {\n\t\t\t\t\treject(authUser['error']);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.setPassword(user, newPassword).then(res => resolve(res), rej => reject(rej));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t\n\tregister(user, password) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!user.username) {\n\t\t\t\treject('Missing Username');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet dbUser = await Users.findOne({username: user.username});\n\t\t\t\t\n\t\t\t\tif (dbUser) {\n\t\t\t\t\treject('Username Exists');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdbUser = await Users.findOne({email: user.email});\n\n\t\t\t\t\tif (dbUser) {\n\t\t\t\t\t\treject('Email Exists');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tuser.setPassword(password);\n\t\t\t\t\t\tresolve(user);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tresetAttempts(user: UserModel) {\n\t\treturn Users.updateOne({_id: user._id}, {$set: {attempts: 0}});\n\t}\n}\n\nexport function objectIdHexString() {\n\tlet objectId = new ObjectId();\n\treturn objectId.toHexString();\n}\n\nfunction pbkdf2(password, salt, options, callback) {\n\tcrypto.pbkdf2(password, salt, options.iterations, options.keylen, options.digestAlgorithm, callback);\n};\n\nfunction pbkdf2Promisified(password, salt, options): Promise<any> {\n\treturn new Promise((resolve, reject) => pbkdf2(password, salt, options, (err, hashRaw) => (err ? reject(err) : resolve(hashRaw))));\n}\n\nfunction randomBytes(saltlen): Promise<Buffer> {\n\treturn new Promise((resolve, reject) => crypto.randomBytes(saltlen, (err, saltBuffer) => (err ? reject(err) : resolve(saltBuffer))));\n}\n\nfunction objectContainsPropertyDeep(obj: Object, prop: string) {\n\tlet keys = Object.keys(obj);\n\n\tif (keys.some(a => a === prop)) {\n\t\treturn true;\n\t}\n\t\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tlet key = keys[i];\n\t\tif (obj[key] && typeof obj[key] === 'object' && objectContainsPropertyDeep(obj[key], prop)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}"]}
1
+ {"version":3,"sources":["../../src/managers/mongo.manager.ts"],"names":["simpl_schema_1","require","mongodb_1","index_1","user_collection_1","common_1","log_collection_1","NodeCache","crypto","scmp","monitor_manager_1","os_1","numCPUs","cpus","length","v8","async_1","MongoManager","serverConfig","_this","this","_collections","_mongoQueue","_mongoQueueId","_mongoQueueRunning","_mongoQueueCacheId","_heapStats","getHeapStatistics","_heapLimit","heap_size_limit","_serverCollections","_debugMongoQueueHits","_debugRemoveCacheHits","_debugMongoQueueCollections","_serverConfig","_isWorkersEnabled","_isWorkerInstance","_nodeCache","stdTTL","checkperiod","process","env","IS_WORKERS_ENABLED","IS_WORKER_INSTANCE","setInterval","ResolveIOServer","getMainServer","getSubscriptionManager","getEnableDebug","console","log","Date","JSON","stringify","sort","a","b","name_collection","localeCompare","collection","function","initServerCollections","runQueue","setupChangeStream","prototype","getMainDB","listCollections","toArray","collections","_a","sent","getServerCollections","registerCollection","collectionOptions","timeseries","timeField","some","name","collectionName","type","dropCollection","then","createCollection","push","filter","addToQueue","mongoQueue","name_function","name_function_addt","data_function","data_function_addt","running","cbs_next","cbs","_id","splice","queueArr","i","monitor_2","monitor_1","hits","invalidateFlag","cacheId","res_1","parse","get","dateReviver","forEach","cb","_d","MonitorMongo","__spreadArray","_b","_c","apply","res","finish","invalidateCount","concat","stringifyLength","stringifyFail","replace","e","Array","isArray","addToCache","err","map","indexOf","id","data","nodeCacheSize","getStats","vsize","deleteCount","zz","queue","del","set","invalidateQueryCache","lookup_collections","includes","changeStream","getMongoConnection","db","watch","on","change","__awaiter","coll","close","setTimeout","MongoManagerModel","exports","options","versionOptions","collection_main","collection_version","MongoManagerUserCollection","MongoManagerCollection","useVersionCollection","useVersions","versionSchema","deepCopy","schema","blackbox","useReportBuilder","reportBuilderLookupTables","timestamps","createLogs","checkSchema","createIndex","_id._id","_id.__v","versionCollection","schemaCopy","interval","simplschema","rbSchema","useRB","default","buildRbLookups","buildRbSchema","getMongoManager","clearInterval","extractIndexNameFromError","errorMessage","matches","match","aggregate","pipeline","skipCache","Promise","resolve","reject","monitor","aggregateCount","cached","from","elem","index","self","aggregateCursor","cursor","ev","aggregateStream","streamOptions","stream","bulkWrite","operations","bypassLogs","bypassCheckSchema","logs","versionOps","deleteOldVersionsOps","bulkOps","updateFilters","updateManyFilters","deleteManyFilters","op","opType","Object","keys","find","$or","currentDocs","getNestedValue","doc","key","split","reduce","acc","part","item","val","undefined","findMatchingDocs","matchDocument","every","value","docValue","subFilter","evaluateCondition","condition","$in","$nin","$ne","$gt","$gte","$lt","$lte","$exists","RegExp","$regex","$options","test","date","document","objectIdHexString","this_1","hasOwnProperty","__v","createdAt","updatedAt","validation","newContext","validate","validationErrors","getMethodManager","callMethodInternal","call","insertOne","id_document","payload","getBinarySize","method","id_user","user","messageId","route","matchingDocs","matchingDocs_1","currentDoc","update","$set","modifier","versionDoc","objectContainsPropertyDeep","$inc","deleteMany","upsert","$setOnInsert","replacement","_e","matchingDocs_2","_f","matchingDocs_3","_i","operations_1","slice","mainResult","Logs","err_1","countDocuments","create","f_docs","insertMany","fieldOrSpec","indexQueue","action","specs","result","createIndexes","indexSpecs","docs","replaceOne","$and","acknowledged","deletedCount","deleteOne","monitor_3","findOneAndDelete","returnVal","monitor_4","distinct","drop","dropIndex","indexName","dropIndexes","monitor_5","findById","findOne","findCount","count","findCursor","removeAllListeners","findStream","monitor_6","findOneAndReplace","findOneAndUpdate","indexes","indexExists","bypassMonitor","validationResults","validDocs","idx","monitor_7","listIndexes","rename","newName","monitor_8","modifiedCount","prevDoc","docId","docVersion","updatedDoc_1","getMongoMergeUpdatedDoc","monitor_9","monitor_10","returnDocument","monitor_11","monitor_12","updateMany","bypassVersions","$unset","updateOne","monitor_13","monitor_14","monitor_15","ok","monitor_16","watchCollection","task","callback","dbCollection","code","err_2","message","existingIndexName","innerError_1","Error","_super","__extends","authenticate","password","attemptsInterval","Math","pow","attempts","calculatedInterval","last","now","getTime","Users","error","salt","pbkdf2","iterations","keylen","digestAlgorithm","hashBuffer","Buffer","hash","serializeUser","username","deserializeUser","setPassword","randomBytes","saltBuffer","toString","pbkdf2Promisified","hashRaw","services","rej","changePassword","oldPassword","newPassword","authUser","register","email","resetAttempts","ObjectId","toHexString","saltlen","obj","prop"],"mappings":"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","file":"mongo.manager.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { AggregateOptions, AggregationCursor, BulkWriteOptions, ChangeStream, ChangeStreamOptions, CommandOperationOptions, CountDocumentsOptions, CreateCollectionOptions, CreateIndexesOptions, CursorStreamOptions, DeleteOptions, Filter, FindCursor, FindOneAndDeleteOptions, FindOneAndReplaceOptions, FindOneAndUpdateOptions, FindOptions, IndexDescription, IndexInformationOptions, InsertOneOptions, ListIndexesCursor, ListIndexesOptions, ObjectId, RenameOptions, ReplaceOptions, UpdateOptions, OptionalId, Collection, CollectionInfo, OptionalUnlessRequiredId, AnyBulkWriteOperation, BulkWriteResult, DbStatsOptions } from 'mongodb';\nimport { LookupTables } from '../models/report-builder.model';\nimport { ResolveIOServer } from '../index';\nimport { Users } from '../collections/user.collection';\nimport { buildRbLookups, buildRbSchema, dateReviver, deepCopy, getBinarySize, getMongoMergeUpdatedDoc } from '../util/common';\nimport { UserModel } from '../models/user.model';\nimport { Logs } from '../collections/log.collection';\nimport * as NodeCache from 'node-cache';\nconst crypto = require('crypto');\nconst scmp = require('scmp');\nimport { MonitorMongo } from './monitor.manager';\nimport { CollectionDocument, Document } from '../models/collection-document.model';\nimport { cpus } from 'os';\nconst numCPUs = cpus().length;\nconst v8 = require('v8');\nimport async from 'async';\n\ninterface MongoQueueModel {\n\t_id: number,\n\tname_collection: string;\n\tlookup_collections: string[];\n\tname_function: string;\n\tdata_function: any[];\n\tname_function_addt: string;\n\tdata_function_addt: any[];\n\tcbs: Function[];\n\tcbs_next: Function[];\n\trunning: boolean;\n\tcacheId: number;\n\tinvalidateFlag: boolean;\n\tinvalidateCount: number;\n}\n\n// export declare interface MongoManagerFilterOperators<T> extends Document {\nexport declare interface MongoManagerFilterParamaterOperators<P> {\n\t$eq?: P;\n $gt?: P;\n $gte?: P;\n $in?: P extends Array<any> ? P : P[];\n $lt?: P;\n $lte?: P;\n $ne?: P;\n $nin?: P extends Array<any> ? P : P[];\n $not?: P extends string ? MongoManagerFilterParamaterOperators<P> | RegExpConstructor : MongoManagerFilterParamaterOperators<P>;\n $exists?: boolean;\n $expr?: any[]\n $regex?: P extends string ? RegExpConstructor | string : never;\n $options?: P extends string ? string : never;\n $geoIntersects?: {\n $geometry: Document;\n };\n $geoWithin?: Document;\n $near?: Document;\n $nearSphere?: Document;\n $maxDistance?: number;\n $all?: any[];\n $elemMatch?: Document;\n $size?: P extends any[] ? number : never;\n}\n\nexport declare interface MongoManagerFilterOperators<T> extends Document { //TODO: Remove extends document when I get answer on S.O.\n $and?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n $nor?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n $or?: MongoManagerFilter<T>[] | MongoManagerFilterOperators<T>;\n $text?: {\n $search: string;\n $language?: string;\n $caseSensitive?: boolean;\n $diacriticSensitive?: boolean;\n };\n $where?: string | ((this: T) => boolean);\n $comment?: string | Document;\n}\n\n// function isDotStringRegExp(obj: Object, dotKey: string): boolean {\n// \tlet keyData = dotKey.split('.');\n// \tlet objData = obj;\n\t\n// \tfor (let i = 0; i < keyData.length; i++) {\n// \t\tlet key = keyData[i];\n// \t\tif (objData.hasOwnProperty(key)) {\n// \t\t\tobjData = objData[key];\n\t\t\t\n// \t\t\tif (i === keyData.length - 1) {\n// \t\t\t\treturn true;\n// \t\t\t}\n// \t\t}\n// \t\telse {\n// \t\t\treturn false;\n// \t\t}\n// \t}\n// }\n\n// export declare type MongoManagerDotStringFilter<T> = {\n// \t[key: string]: (isDotStringRegExp(T, key) ? any : never);\n// };\n\nexport declare type MongoManagerFilter<T> = {\n\t[P in keyof T]?: T[P] | MongoManagerFilterParamaterOperators<T[P]>;\n};\n\nexport declare type MongoManagerUnsetFilter<T> = {\n\t[P in keyof T]?: number | boolean;\n};\n\nexport declare type MongoManagerIncFilter<T> = {\n\t[P in keyof T]?: number;\n};\n\nexport declare type MongoManagerUpdateFilter<T> = {\n $inc?: MongoManagerIncFilter<T> | Document;\n $set?: MongoManagerFilter<T> | Document;\n $setOnInsert?: MongoManagerFilter<T> | Document;\n $unset?: MongoManagerUnsetFilter<T> | Document;\n};\n\nexport class MongoManager {\n\tprivate _collections: MongoManagerCollection<CollectionDocument>[] = [];\n\tprivate _mongoQueue: MongoQueueModel[] = [];\n\tprivate _mongoQueueId = 0;\n\tprivate _mongoQueueRunning = false;\n\n\tprivate _nodeCache;\n\tprivate _mongoQueueCacheId = 1;\n\n\tprivate _heapStats = v8.getHeapStatistics();\n\tprivate _heapLimit = this._heapStats.heap_size_limit / numCPUs / 8;\n\n\tprivate _serverCollections: (CollectionInfo | Pick<CollectionInfo, \"name\" | \"type\">)[] = [];\n\n\tprivate _debugMongoQueueHits = 0;\n\tprivate _debugRemoveCacheHits = 0;\n\tprivate _debugMongoQueueCollections = [];\n\tprivate _serverConfig = null;\n\tprivate _isWorkersEnabled = false;\n\tprivate _isWorkerInstance = false;\n\n\tconstructor(serverConfig) {\n\t\tthis._serverConfig = serverConfig;\n\t\tthis._nodeCache = new NodeCache( { stdTTL: 0, checkperiod: 0 } );\n\n\t\tthis._isWorkersEnabled = process.env.IS_WORKERS_ENABLED === 'true';\n\t\tthis._isWorkerInstance = process.env.IS_WORKER_INSTANCE === 'true';\n\n\t\tsetInterval(() => {\n\t\t\tif (ResolveIOServer.getMainServer().getSubscriptionManager() && ResolveIOServer.getMainServer().getSubscriptionManager().getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Mongo Manager', 'Collections', this._collections.length);\n\t\t\t\tconsole.log(new Date(), 'Mongo Manager', 'Mongo Queue', this._mongoQueue.length, JSON.stringify(this._mongoQueue.sort((a, b) => a.name_collection.localeCompare(b.name_collection)), null, 2));\n\t\t\t\tconsole.log(new Date(), 'Mongo Manager', 'Server Collections', this._serverCollections.length);\n\t\t\t\tconsole.log(new Date(), 'Mongo Manager', 'Mongo Queue Hits', this._debugMongoQueueHits);\n\t\t\t\tconsole.log(new Date(), 'Mongo Manager', 'Mongo Queue Collections', this._debugMongoQueueCollections.sort((a, b) => a.collection.localeCompare(b.collection) || a.function.localeCompare(b.function)));\n\t\t\t\tconsole.log(new Date(), 'Mongo Manager', 'Cache Cleanup Hits', JSON.stringify(this._debugRemoveCacheHits, null, 2));\n\t\t\t}\n\t\t\t\t\n\t\t\tthis._debugMongoQueueHits = 0;\n\t\t\tthis._debugRemoveCacheHits = 0;\n\t\t\tthis._debugMongoQueueCollections = [];\n\t\t}, 60000);\n\n\t\tthis.initServerCollections();\n\n\t\tthis.runQueue();\n\n\t\tif (this._isWorkersEnabled && this._isWorkerInstance) {\n\t\t\tthis.setupChangeStream();\n\t\t}\n\t}\n\n\tasync initServerCollections() {\n\t\tlet collections = await ResolveIOServer.getMainDB().listCollections().toArray();\n\t\tthis._serverCollections = collections;\n\t}\n\n\tgetServerCollections() {\n\t\treturn this._serverCollections;\n\t}\n\n\tregisterCollection(collection: MongoManagerCollection<CollectionDocument>) {\n\t\tif (collection.collectionOptions && collection.collectionOptions.timeseries && collection.collectionOptions.timeseries.timeField && this._serverCollections.some(a => a.name === collection.collectionName && a.type === 'collection')) {\n\t\t\tResolveIOServer.getMainDB().dropCollection(collection.collectionName).then(() => {\n\t\t\t\tthis.createCollection(collection);\n\t\t\t});\n\t\t}\n\t\n\t\tthis._collections.push(collection);\n\t}\n\n\tcreateCollection(collection: MongoManagerCollection<CollectionDocument>) {\n\t\tResolveIOServer.getMainDB().createCollection<CollectionDocument>(collection.collectionName, collection.collectionOptions);\n\t}\n\n\tcollections() {\n\t\treturn this._collections;\n\t}\n\n\tcollection(collectionName: string): MongoManagerCollection<CollectionDocument> | MongoManagerUserCollection<CollectionDocument> {\n\t\treturn this._collections.filter(a => a.collectionName === collectionName)[0];\n\t}\n\n\taddToQueue(mongoQueue: MongoQueueModel) {\n\t\tlet _mongoQueue = this._mongoQueue.filter(a => a.name_collection === mongoQueue.name_collection && a.name_function === mongoQueue.name_function && a.name_function_addt === mongoQueue.name_function_addt && JSON.stringify(a.data_function) === JSON.stringify(mongoQueue.data_function) && JSON.stringify(a.data_function_addt) === JSON.stringify(mongoQueue.data_function_addt))[0];\n\t\t\n\t\tif (_mongoQueue) {\n\t\t\tif (!_mongoQueue.running) {\n\t\t\t\t_mongoQueue.cbs.push(mongoQueue.cbs[0]);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_mongoQueue.cbs_next.push(mongoQueue.cbs[0]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tmongoQueue._id = this._mongoQueueId;\n\t\t\tthis._mongoQueueId += 1;\n\n\t\t\tthis._mongoQueue.splice(0, 0, mongoQueue);\n\t\t}\n\t}\n\n\tprivate async runQueue() {\n\t\tsetInterval(() => {\n\t\t\tif (!this._mongoQueueRunning) {\n\t\t\t\tconst queueArr = this._mongoQueue.filter(a => !a.running && a.cbs.length);\n\t\t\t\tif (queueArr.length) {\n\t\t\t\t\tthis._mongoQueueRunning = true;\n\t\t\t\t\t\n\t\t\t\t\tfor (let i = queueArr.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tthis._debugMongoQueueHits += 1;\n\n\t\t\t\t\t\tlet mongoQueue = queueArr[i];\n\n\t\t\t\t\t\tif (!this._debugMongoQueueCollections.some(a => a.collection === mongoQueue.name_collection && a.function === mongoQueue.name_function)) {\n\t\t\t\t\t\t\tthis._debugMongoQueueCollections.push({\n\t\t\t\t\t\t\t\tcollection: mongoQueue.name_collection,\n\t\t\t\t\t\t\t\tfunction: mongoQueue.name_function,\n\t\t\t\t\t\t\t\thits: 1\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._debugMongoQueueCollections.filter(a => a.collection === mongoQueue.name_collection && a.function === mongoQueue.name_function)[0].hits += 1;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmongoQueue.running = true;\n\t\t\t\t\t\tmongoQueue.invalidateFlag = false;\n\n\t\t\t\t\t\tif (mongoQueue.cacheId) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tlet res = JSON.parse(this._nodeCache.get(mongoQueue.cacheId), dateReviver);\n\n\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\tcb(null, res, true);\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tmongoQueue.cbs = [];\n\t\t\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcatch {\n\t\t\t\t\t\t\t\tmongoQueue.cacheId = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (!mongoQueue.cacheId) {\n\t\t\t\t\t\t\tif (!mongoQueue.name_function_addt) {\n\t\t\t\t\t\t\t\tlet monitor = new MonitorMongo(mongoQueue.name_function, mongoQueue.name_collection, JSON.stringify(mongoQueue.data_function));\n\t\t\t\t\t\t\t\tResolveIOServer.getMainDB().collection(mongoQueue.name_collection)[mongoQueue.name_function](...mongoQueue.data_function).then(res => {\n\t\t\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\t\t\tif (!mongoQueue.invalidateFlag) {\n\t\t\t\t\t\t\t\t\t\tmongoQueue.invalidateCount = 0;\n\n\t\t\t\t\t\t\t\t\t\tlet stringifyLength = 0;\n\t\t\t\t\t\t\t\t\t\tlet stringifyFail = false;\n\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tlet stringify = JSON.stringify(res).replace(/[\\[\\]\\,\\\"]/g,'');\n\t\t\t\t\t\t\t\t\t\t\tstringifyLength\t = stringify.length;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcatch(e) {\n\t\t\t\t\t\t\t\t\t\t\tstringifyFail = true;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (!stringifyFail && res !== null && res !== undefined && (!Array.isArray(res) || res.length) && stringifyLength < 10000000) {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cacheId = this._mongoQueueCacheId;\n\t\t\t\t\t\t\t\t\t\t\tthis._mongoQueueCacheId += 1;\n\n\t\t\t\t\t\t\t\t\t\t\tthis.addToCache(mongoQueue.cacheId, res);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cacheId = 0;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\t\t\tcb(null, res, false);\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\tif (mongoQueue.cbs_next.length) {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs = mongoQueue.cbs_next;\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs_next = [];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs = [];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tif (mongoQueue.invalidateCount >= 5) {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.invalidateCount = 0;\n\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\t\t\t\tcb(null, res, false);\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs = mongoQueue.cbs.concat(mongoQueue.cbs_next);\n\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs_next = [];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\t\t\tmonitor.finish();\n\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Error ' + mongoQueue.name_function, mongoQueue.name_collection, ...mongoQueue.data_function, err);\n\n\t\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\t\tcb(err, null, false);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\t\t\t\t\tmongoQueue.cbs_next.forEach(cb => {\n\t\t\t\t\t\t\t\t\t\tcb(err, null, false);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id) >= 0) {\n\t\t\t\t\t\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 1);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tlet monitor = new MonitorMongo(mongoQueue.name_function, mongoQueue.name_collection, JSON.stringify([...mongoQueue.data_function, mongoQueue.name_function_addt, ...mongoQueue.data_function_addt]));\n\t\t\t\t\t\t\t\tResolveIOServer.getMainDB().collection(mongoQueue.name_collection)[mongoQueue.name_function](...mongoQueue.data_function)[mongoQueue.name_function_addt](...mongoQueue.data_function_addt).then(res => {\n\t\t\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\t\t\tif (!mongoQueue.invalidateFlag) {\n\t\t\t\t\t\t\t\t\t\tmongoQueue.invalidateCount = 0;\n\n\t\t\t\t\t\t\t\t\t\tlet stringifyLength = 0;\n\t\t\t\t\t\t\t\t\t\tlet stringifyFail = false;\n\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tlet stringify = JSON.stringify(res).replace(/[\\[\\]\\,\\\"]/g,'');\n\t\t\t\t\t\t\t\t\t\t\tstringifyLength\t = stringify.length;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcatch(e) {\n\t\t\t\t\t\t\t\t\t\t\tstringifyFail = true;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tif (!stringifyFail && res !== null && res !== undefined && (!Array.isArray(res) || res.length) && stringifyLength < 10000000) {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cacheId = this._mongoQueueCacheId;\n\t\t\t\t\t\t\t\t\t\t\tthis._mongoQueueCacheId += 1;\n\t\t\t\t\t\t\t\t\t\t\tthis.addToCache(mongoQueue.cacheId, res);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cacheId = 0;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\t\t\tcb(null, res, false);\n\t\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\t\tif (mongoQueue.cbs_next.length) {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs = mongoQueue.cbs_next;\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs_next = [];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs = [];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tif (mongoQueue.invalidateCount >= 5) {\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.invalidateCount = 0;\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\t\t\t\tcb(null, res, false);\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs = mongoQueue.cbs.concat(mongoQueue.cbs_next);\n\t\t\t\t\t\t\t\t\t\tmongoQueue.cbs_next = [];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tmongoQueue.cbs.forEach(cb => {\n\t\t\t\t\t\t\t\t\t\tcb(err, null, false);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\t\t\t\t\tmongoQueue.cbs_next.forEach(cb => {\n\t\t\t\t\t\t\t\t\t\tcb(err, null, false);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id) >= 0) {\n\t\t\t\t\t\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 1);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._mongoQueueRunning = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}, 25);\n\t}\n\n\tprivate addToCache(id, data) {\n\t\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\t\t\t\t\t\t\n\t\tif (nodeCacheSize > this._heapLimit) {\n\t\t\tlet deleteCount = 0;\n\n\t\t\tconst queueArr = this._mongoQueue.filter(a => a.cacheId && !a.running && !a.cbs.length);\n\n\t\t\tfor (let zz = queueArr.length - 1; zz >= 0; zz--) {\n\t\t\t\tthis._debugRemoveCacheHits += 1;\n\n\t\t\t\tlet queue = queueArr[zz];\n\n\t\t\t\tthis._nodeCache.del(queue.cacheId);\n\t\t\t\tqueue.cacheId = 0;\n\n\t\t\t\tif (this._mongoQueue.map(a => a._id).indexOf(queue._id) >= 0) {\n\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(queue._id), 1);\n\t\t\t\t}\n\n\t\t\t\tdeleteCount += 1;\n\n\t\t\t\tnodeCacheSize = this._nodeCache.getStats().vsize;\n\n\t\t\t\tif (nodeCacheSize < this._heapLimit * 0.75) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tconsole.log('Query Cache: ' + 'Too Big, - Deleted: ' + deleteCount + ' - ' + nodeCacheSize);\n\t\t}\n\n\t\tthis._nodeCache.set(id, JSON.stringify(data));\n\t}\n\n\tpublic invalidateQueryCache(collection: string) {\n\t\tlet queueArr = this._mongoQueue.filter(a => (a.name_collection === collection || a.lookup_collections.includes(collection)));\n\t\tfor (let i = queueArr.length - 1; i >= 0; i--) {\n\t\t\tlet queue = queueArr[i];\t\t\t\n\t\t\tif (queue.cacheId) {\n\t\t\t\tthis._nodeCache.del(queue.cacheId);\n\t\t\t\tqueue.cacheId = 0;\n\t\t\t}\n\n\t\t\tif (queue.running) {\n\t\t\t\tqueue.invalidateFlag = true;\n\t\t\t\tqueue.invalidateCount += 1;\n\t\t\t}\n\t\t\telse if (!queue.cbs.length) {\n\t\t\t\tif (this._mongoQueue.map(a => a._id).indexOf(queue._id) >= 0) {\n\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(queue._id), 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate setupChangeStream() {\n\t\tconst db = ResolveIOServer.getMongoConnection().db(this._serverConfig['DATABASE']);\n\t\tconst changeStream = db.watch();\n\n\t\tchangeStream.on('change', async (change) => {\t\n\t\t\t// Call the invalidateQueryCache based on the collection affected\n\t\t\tif (change['ns'] && change['ns'].coll) {\n\t\t\t\tconst collectionName = change['ns'].coll;\n\n\t\t\t\tif (this.collection(collectionName)) {\n\t\t\t\t\tthis.invalidateQueryCache(collectionName);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tchangeStream.on('error', err => {\n\t\t\tconsole.log(new Date(), 'Mongo change stream error. Restart...');\n\t\t\tchangeStream.close();\n\t\t\tsetTimeout(() => this.setupChangeStream(), 5000); // Restart after a delay\n\t\t});\n\n\t\tchangeStream.on('close', () => {\n\t\t\tconsole.log(new Date(), 'Mongo change stream closed. Restarting...');\n\t\t\tsetTimeout(() => this.setupChangeStream(), 5000); // Restart after a delay\n\t\t});\n\t}\n}\n\nexport class MongoManagerModel<T extends CollectionDocument> {\n\tcollection_main: MongoManagerCollection<T> | MongoManagerUserCollection<T> = null;\n\tcollection_version: MongoManagerCollection<T> | MongoManagerUserCollection<T> = null;\n\n\tconstructor(options: MongoManagerCollectionOptions) {\n\t\tif (options.collectionName === 'users') {\n\t\t\tthis.collection_main = new MongoManagerUserCollection<T>(options);\n\t\t}\n\t\telse {\n\t\t\tthis.collection_main = new MongoManagerCollection<T>(options);\n\t\t}\n\n\t\tif (options.useVersionCollection) {\n\t\t\tthis.collection_main.useVersions = true;\n\t\t\t\n\t\t\tlet versionSchema = deepCopy(options.schema);\n\t\t\tversionSchema._id.type = 'Object';\n\t\t\tversionSchema._id.blackbox = true;\n\n\t\t\tlet versionOptions: MongoManagerCollectionOptions = {\n\t\t\t\tcollectionName: options.collectionName + '.versions',\n\t\t\t\tschema: versionSchema,\n\t\t\t\tuseVersionCollection: false,\n\t\t\t\tuseReportBuilder: false,\n\t\t\t\treportBuilderLookupTables: [],\n\t\t\t\ttimestamps: true,\n\t\t\t\tcreateLogs: false,\n\t\t\t\tcheckSchema: false,\n\t\t\t\tcollectionOptions: null\n\t\t\t};\n\n\t\t\tif (options.collectionName === 'users') {\t\n\t\t\t\tthis.collection_version = new MongoManagerUserCollection<T>(versionOptions);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.collection_version = new MongoManagerCollection<T>(versionOptions);\n\t\t\t}\n\n\t\t\tthis.collection_version.createIndex({'_id._id': 1, '_id.__v': 1});\n\t\t\tthis.collection_main.versionCollection = options.collectionName + '.versions';\n\t\t}\n\t}\n}\n\nexport interface MongoManagerCollectionOptions {\n\tcollectionName: string;\n\tschema: object;\n\tuseVersionCollection: boolean;\n\tuseReportBuilder: boolean;\n\treportBuilderLookupTables: LookupTables[]\n\ttimestamps: boolean;\n\tcreateLogs: boolean;\n\tcheckSchema: boolean;\n\tcollectionOptions: CreateCollectionOptions;\n}\n\nexport class MongoManagerCollection<T extends CollectionDocument> {\n\tcollectionName = '';\n\tcheckSchema = false;\n\tsimplschema = null;\n\trbSchema = null;\n\ttimestamps = false;\n\tuseVersions = false;\n\tversionCollection = '';\n\tcreateLogs = true;\n\tuseRB = false;\n\tcollectionOptions: CreateCollectionOptions;\n\t\n\tconstructor(options: MongoManagerCollectionOptions) {\n\t\tthis.collectionName = options.collectionName;\n\t\tthis.simplschema = new SimpleSchema(options.schema);\n\t\tthis.timestamps = options.timestamps;\n\t\tthis.createLogs = options.createLogs;\n\t\tthis.checkSchema = options.checkSchema;\n\t\tthis.collectionOptions = options.collectionOptions;\n\n\t\tif (options.useReportBuilder) {\n\t\t\tthis.useRB = true;\n\t\t\tlet schemaCopy = deepCopy(options.schema);\n\t\t\tlet rbSchema = buildRbLookups(options.reportBuilderLookupTables, schemaCopy, []);\n\t\t\tthis.rbSchema = buildRbSchema(rbSchema);\n\t\t}\n\n\t\tlet interval = setInterval(() => {\n\t\t\tif (ResolveIOServer && ResolveIOServer.getMainServer() && ResolveIOServer.getMongoManager() && ResolveIOServer.getMongoManager().getServerCollections().length) {\n\t\t\t\tResolveIOServer.getMongoManager().registerCollection(this);\n\t\t\t\tclearInterval(interval);\n\t\t\t}\n\t\t}, 1);\n\t}\n\n\tprivate static indexQueue = async.queue(async (task, callback) => {\n const { action, collection, specs, options } = task;\n \n const dbCollection = ResolveIOServer.getMainDB().collection(collection.collectionName, collection.collectionOptions);\n \n if (!dbCollection) {\n return callback(new Error(`Collection ${collection.collectionName} not found`));\n }\n\n let monitor = new MonitorMongo(action, collection.collectionName, JSON.stringify([specs, options]));\n\n const createIndex = async () => {\n try {\n const result = await dbCollection[action](...specs, options);\n monitor.finish();\n callback(null, result);\n } catch (err) {\n if (err.code === 85 || err.message.includes('IndexOptionsConflict')) {\n try {\n const existingIndexName = collection.extractIndexNameFromError(err.message);\n if (existingIndexName) {\n await dbCollection.dropIndex(existingIndexName);\n return await createIndex();\n }\n } catch (innerError) {\n callback(innerError);\n }\n }\n monitor.finish();\n callback(err);\n }\n };\n\n await createIndex();\n }, 1);\n\n // Method to extract index name from error message\n extractIndexNameFromError(errorMessage) {\n\t\tlet regexPattern = /Index already exists with a different name: (\\S+)/;\n\t\tlet matches = errorMessage.match(regexPattern);\n\t\n\t\tif (!matches || matches.length <= 1) {\n\t\t\t// If the first pattern doesn't match, try the second pattern\n\t\t\tregexPattern = /existing index:.*name: \"([^\"]+)\"/;\n\t\t\tmatches = errorMessage.match(regexPattern);\n\t\t}\n\t\n\t\treturn matches && matches.length > 1 ? matches[1] : null;\n\t}\t\n\n\taggregate(pipeline: object[], options?: AggregateOptions, skipCache = false) : Promise<any[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\t// if (!skipCache) {\n\t\t\t// \tResolveIOServer.getMongoManager().addToQueue({\n\t\t\t// \t\t_id: 0,\n\t\t\t// \t\tname_collection: this.collectionName,\n\t\t\t// \t\tname_function: 'aggregate',\n\t\t\t// \t\tname_function_addt: 'toArray',\n\t\t\t// \t\tdata_function: [pipeline, options],\n\t\t\t// \t\tdata_function_addt: [],\n\t\t\t// \t\tcbs: [(err, res, cached) => {\n\t\t\t// \t\t\tif (err) {\n\t\t\t// \t\t\t\treject(err);\n\t\t\t// \t\t\t}\n\t\t\t// \t\t\telse {\n\t\t\t// \t\t\t\tresolve(res);\n\t\t\t// \t\t\t}\n\t\t\t// \t\t}],\n\t\t\t// \t\tcbs_next: [],\n\t\t\t// \t\trunning: false,\n\t\t\t// \t\tcacheId: 0,\n\t\t\t// \t\tlookup_collections: pipeline.filter(a => a['$lookup'] && a['$lookup'].from).map(a => a['$lookup'].from).filter((elem, index, self) => {\n\t\t\t// \t\t\treturn index === self.indexOf(elem);\n\t\t\t// \t\t}),\n\t\t\t// \t\tinvalidateFlag: false,\n\t\t\t// \t\tinvalidateCount: 0\n\t\t\t// \t});\n\t\t\t// }\n\t\t\t// else {\n\t\t\t// \tlet monitor = new MonitorMongo('aggregate', this.collectionName, JSON.stringify([pipeline, options]));\n\t\t\t// \tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).toArray().then(res => {\n\t\t\t// \t\tmonitor.finish();\n\t\t\t// \t\tresolve(res);\n\t\t\t// \t}, err => {\n\t\t\t// \t\tmonitor.finish();\n\t\t\t// \t\tconsole.log(new Date(), 'Error Aggregate', this.collectionName, pipeline, options, err);\n\t\t\t// \t\treject(err);\n\t\t\t// \t});\n\t\t\t// }\n\n\t\t\tlet monitor = new MonitorMongo('aggregate', this.collectionName, JSON.stringify([pipeline, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).toArray().then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Aggregate', this.collectionName, pipeline, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\taggregateCount(pipeline: object[], options?: AggregateOptions) : Promise<number> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tResolveIOServer.getMongoManager().addToQueue({\n\t\t\t\t_id: 0,\n\t\t\t\tname_collection: this.collectionName,\n\t\t\t\tname_function: 'aggregate',\n\t\t\t\tname_function_addt: 'count',\n\t\t\t\tdata_function: [pipeline, options],\n\t\t\t\tdata_function_addt: [],\n\t\t\t\tcbs: [(err, res, cached) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t}\n\t\t\t\t}],\n\t\t\t\tcbs_next: [],\n\t\t\t\trunning: false,\n\t\t\t\tcacheId: 0,\n\t\t\t\tlookup_collections: pipeline.filter(a => a['$lookup'] && a['$lookup'].from).map(a => a['$lookup'].from).filter((elem, index, self) => {\n\t\t\t\t\treturn index === self.indexOf(elem);\n\t\t\t\t}),\n\t\t\t\tinvalidateFlag: false,\n\t\t\t\tinvalidateCount: 0\n\t\t\t});\n\t\t});\n\t}\n\n\taggregateCursor(pipeline: object[], options?: AggregateOptions): AggregationCursor {\n\t\tlet monitor = new MonitorMongo('aggregateCursor', this.collectionName, JSON.stringify([pipeline, options]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options);\n\t\tcursor.on('close', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn cursor;\n\t}\n\n\taggregateStream(pipeline: object[], options?: AggregateOptions, streamOptions?: CursorStreamOptions) {\n\t\tlet monitor = new MonitorMongo('aggregateStream', this.collectionName, JSON.stringify([pipeline, options, streamOptions]));\n\t\tlet stream = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).aggregate(pipeline, options).stream(streamOptions);\n\t\tstream.on('end', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t})\n\t\t.on('error', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t})\n\t\t.on('close', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn stream;\n\t}\n\n\t// bulkWrite(operations: AnyBulkWriteOperation<T>[], options: BulkWriteOptions): Promise<BulkWriteResult> {\n\tbulkWrite(operations: any[], options?: BulkWriteOptions, bypassLogs = false, bypassCheckSchema = false): Promise<BulkWriteResult> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!operations.length) {\n\t\t\t\tresolve(null);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst logs = [];\n\t\t\tconst versionOps = []; // For storing versioning ops\n\t\t\tconst deleteOldVersionsOps = []; // For deleteMany operations to remove older versions\n\t\t\tconst bulkOps = [];\n\t\t\tconst updateFilters = [];\n\t\t\tconst updateManyFilters = [];\n\t\t\tconst deleteManyFilters = [];\n\t\n\t\t\t// Collect filters for all operations\n\t\t\toperations.forEach(op => {\n\t\t\t\tconst opType = Object.keys(op)[0];\n\t\t\t\tif (opType === 'updateOne' || opType === 'deleteOne' || opType === 'replaceOne') {\n\t\t\t\t\tupdateFilters.push(op[opType].filter); // Store filters for updateOne, deleteOne, and replaceOne\n\t\t\t\t}\n\t\t\t\telse if (opType === 'updateMany') {\n\t\t\t\t\tupdateManyFilters.push(op[opType].filter); // Store the entire filter for updateMany\n\t\t\t\t}\n\t\t\t\telse if (opType === 'deleteMany') {\n\t\t\t\t\tdeleteManyFilters.push(op[opType].filter); // Store the entire filter for deleteMany\n\t\t\t\t}\n\t\t\t});\n\t\n\t\t\t// Pre-fetch all documents based on the filters before proceeding with the bulk operations\n\t\t\tconst currentDocs = updateFilters.length || updateManyFilters.length || deleteManyFilters.length\n\t\t\t\t? await this.find(<any>{ $or: [...updateFilters, ...updateManyFilters, ...deleteManyFilters] })\n\t\t\t\t: [];\n\n\t\t\t// Helper function to get the value from a document using a dot-notated key (e.g., 'obj.property')\n\t\t\t// This will also handle arrays of objects (e.g., 'obj.arrayOfObjects.property')\n\t\t\tconst getNestedValue = (doc, key) => {\n\t\t\t\tconst parts = key.split('.');\n\n\t\t\t\treturn parts.reduce((acc, part) => {\n\t\t\t\t\tif (Array.isArray(acc)) {\n\t\t\t\t\t\t// If we're dealing with an array, return an array of values for each element\n\t\t\t\t\t\treturn acc.map(item => item[part]).filter(val => val !== undefined);\n\t\t\t\t\t}\n\t\t\t\t\treturn acc && acc[part];\n\t\t\t\t}, doc);\n\t\t\t};\n\t\n\t\t\t// Helper function to locally find matching documents based on filter\n\t\t\tconst findMatchingDocs = (filter) => {\n\t\t\t\treturn currentDocs.filter(doc => {\n\t\t\t\t\treturn matchDocument(filter, doc);\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tconst matchDocument = (filter, doc) => {\n\t\t\t\treturn Object.keys(filter).every(key => {\n\t\t\t\t\tconst value = filter[key];\n\t\t\t\t\tconst docValue = getNestedValue(doc, key); // Get nested value from the document\n\t\t\t\n\t\t\t\t\t// Handle logical operators\n\t\t\t\t\tif (key === '$and') {\n\t\t\t\t\t\treturn value.every(subFilter => matchDocument(subFilter, doc));\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\tif (key === '$or') {\n\t\t\t\t\t\treturn value.some(subFilter => matchDocument(subFilter, doc));\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\t// If docValue is an array, apply filter conditions to each element\n\t\t\t\t\tif (Array.isArray(docValue)) {\n\t\t\t\t\t\treturn docValue.some(val => evaluateCondition(value, val));\n\t\t\t\t\t}\n\t\t\t\n\t\t\t\t\t// Otherwise, apply the condition to the single value\n\t\t\t\t\treturn evaluateCondition(value, docValue);\n\t\t\t\t});\n\t\t\t};\n\t\t\t\n\t\t\t// Helper function to evaluate the condition (value) against the document value (docValue)\n\t\t\tconst evaluateCondition = (condition, docValue) => {\n\t\t\t\t// If condition is an object, handle operators like $in, $nin, $ne, etc.\n\t\t\t\tif (condition instanceof Object) {\n\t\t\t\t\tif ('$in' in condition) {\n\t\t\t\t\t\treturn condition.$in.includes(docValue);\n\t\t\t\t\t}\n\t\t\t\t\tif ('$nin' in condition) {\n\t\t\t\t\t\treturn !condition.$nin.includes(docValue);\n\t\t\t\t\t}\n\t\t\t\t\tif ('$ne' in condition) {\n\t\t\t\t\t\treturn docValue !== condition.$ne;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$gt' in condition) {\n\t\t\t\t\t\treturn docValue > condition.$gt;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$gte' in condition) {\n\t\t\t\t\t\treturn docValue >= condition.$gte;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$lt' in condition) {\n\t\t\t\t\t\treturn docValue < condition.$lt;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$lte' in condition) {\n\t\t\t\t\t\treturn docValue <= condition.$lte;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$exists' in condition) {\n\t\t\t\t\t\treturn (docValue !== undefined) === condition.$exists;\n\t\t\t\t\t}\n\t\t\t\t\tif ('$regex' in condition) {\n\t\t\t\t\t\tconst regex = new RegExp(condition.$regex, condition.$options || '');\n\t\t\t\t\t\treturn regex.test(docValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t\t// Handle regular equality comparison\n\t\t\t\treturn docValue === condition;\n\t\t\t};\n\t\n\t\t\tfor (const op of operations) {\n\t\t\t\tconst opType = Object.keys(op)[0];\n\t\t\t\tlet doc = op[opType];\n\t\n\t\t\t\tif (opType === 'insertOne') {\n\t\t\t\t\t// Ensure _id and __v for insertOne operations\n\t\t\t\t\tif (!doc.document._id) {\n\t\t\t\t\t\tdoc.document._id = objectIdHexString();\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this.useVersions && !doc.document.hasOwnProperty('__v')) {\n\t\t\t\t\t\tdoc.document.__v = 0;\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tlet date = new Date();\n\n\t\t\t\t\t\tif (!doc.document.createdAt) {\n\t\t\t\t\t\t\tdoc.document.createdAt = date;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!doc.document.updatedAt) {\n\t\t\t\t\t\t\tdoc.document.updatedAt = date;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\tconst isValid = validation.validate(doc.document);\n\t\t\n\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - insertOne', validation.validationErrors());\n\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite insertOne - ' + this.collectionName, [validation.validationErrors(), doc.document]);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t// Log the operation\n\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: doc.document._id,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options])) < 200000 ? JSON.stringify([op, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\n\t\t\t\t\tbulkOps.push(op); // Add insertOne operation to bulkOps\n\t\t\t\t} \n\t\t\t\telse if (opType === 'updateOne') {\t\n\t\t\t\t\t// Find all matching documents locally based on filter\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\n\t\t\t\t\tif (matchingDocs.length) {\n\t\t\t\t\t\tfor (let currentDoc of matchingDocs) {\n\t\t\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\t\t\tif (doc.update.$set) {\n\t\t\t\t\t\t\t\t\tdoc.update.$set.updatedAt = new Date();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tdoc.update.$set = { updatedAt: new Date() };\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\t\tconst isValid = validation.validate(doc.update, {modifier: true});\n\t\t\t\t\n\t\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - updateOne', validation.validationErrors());\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite updateOne - ' + this.collectionName, [validation.validationErrors(), doc.update, currentDoc]);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\n\t\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, '__v')) {\n\t\t\t\t\t\t\t\t\tif (!doc.update.$inc) {\n\t\t\t\t\t\t\t\t\t\tdoc.update.$inc = { __v: 1 };\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tdoc.update.$inc.__v = 1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\t\tid_document: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, currentDoc])) < 200000 ? JSON.stringify([op, options, currentDoc], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\tbulkOps.push(op); // Add updateOne or replaceOne operation to bulkOps\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (doc.upsert) {\n\t\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\t\tconst isValid = validation.validate(doc.update, {modifier: true});\n\t\t\t\t\n\t\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - updateOne', validation.validationErrors());\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite updateOne - ' + this.collectionName, [validation.validationErrors(), doc.update]);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, '_id')) {\n\t\t\t\t\t\t\t\tdoc.update.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, '__v')) {\n\t\t\t\t\t\t\t\t\tdoc.update.$setOnInsert.__v = 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n \n\t\t\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, 'createdAt')) {\n\t\t\t\t\t\t\t\t\tdoc.update.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, 'updatedAt')) {\n\t\t\t\t\t\t\t\t\tdoc.update.$setOnInsert.updatedAt = new Date();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\t\tid_document: doc.update.$setOnInsert._id,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, doc.update])) < 200000 ? JSON.stringify([op, options, doc.update], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\tbulkOps.push(op); // Add updateOne or replaceOne operation to bulkOps\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (opType === 'replaceOne') {\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tdoc.replacement.updatedAt = new Date();\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Find all matching documents locally based on filter\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\n\t\t\t\t\tif (matchingDocs.length) {\n\t\t\t\t\t\tfor (let currentDoc of matchingDocs) {\n\t\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\t\tconst isValid = validation.validate(doc.replacement);\n\t\t\t\t\n\t\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - insertOne', validation.validationErrors());\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite replaceOne - ' + this.collectionName, [validation.validationErrors(), doc.replacement]);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\t\t\tdoc.replacement.__v = versionDoc.__v + 1;\n\t\t\n\t\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\t\tid_document: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, currentDoc])) < 200000 ? JSON.stringify([op, options, currentDoc], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\tbulkOps.push(op); // Add updateOne or replaceOne operation to bulkOps\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (doc.upsert) {\n\t\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\t\tconst isValid = validation.validate(doc.replacement);\n\t\t\t\t\n\t\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - replaceOne', validation.validationErrors());\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite replaceOne - ' + this.collectionName, [validation.validationErrors(), doc.replacement]);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.replacement, '_id')) {\n\t\t\t\t\t\t\t\tdoc.replacement._id = objectIdHexString();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.replacement, '__v')) {\n\t\t\t\t\t\t\t\t\tdoc.replacement.__v = 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n \n\t\t\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.replacement, 'createdAt')) {\n\t\t\t\t\t\t\t\t\tdoc.replacement.createdAt = new Date();\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.replacement, 'updatedAt')) {\n\t\t\t\t\t\t\t\t\tdoc.replacement.updatedAt = new Date();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\t\tid_document: doc.replacement._id,\n\t\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, doc.replacement])) < 200000 ? JSON.stringify([op, options, doc.replacement], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\t\tbulkOps.push(op); // Add updateOne or replaceOne operation to bulkOps\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (opType === 'deleteOne') {\n\t\t\t\t\t// Find all matching documents locally based on filter\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\t\t\t\t\n\t\t\t\t\tmatchingDocs.forEach(currentDoc => {\n\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\tid_document: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options, currentDoc])) < 200000 ? JSON.stringify([op, options, currentDoc], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tbulkOps.push(op); // Add deleteOne operation to bulkOps\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse if (opType === 'updateMany') {\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tif (doc.update.$set) {\n\t\t\t\t\t\t\tdoc.update.$set.updatedAt = new Date();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdoc.update.$set = {\n\t\t\t\t\t\t\t\tupdatedAt: new Date()\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\tif (!objectContainsPropertyDeep(doc.update, '__v')) {\n\t\t\t\t\t\t\tif (!doc.update.$inc) {\n\t\t\t\t\t\t\t\tdoc.update.$inc = { __v: 1 };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tdoc.update.$inc.__v = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// Process all documents matching the updateMany filter locally\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\n\t\t\t\t\tfor (let currentDoc of matchingDocs) {\n\t\t\t\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\t\t\tconst isValid = validation.validate(doc.update, {modifier: true});\n\t\t\t\n\t\t\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - bulkWrite - insertOne', validation.validationErrors());\n\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on bulkWrite updateMany - ' + this.collectionName, [validation.validationErrors(), doc.update]);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\n\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\tid_document: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options])) < 200000 ? JSON.stringify([op, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tbulkOps.push(op); // Add updateMany operation to bulkOps\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (opType === 'deleteMany') {\n\t\t\t\t\t// Process all documents matching the deleteMany filter locally\n\t\t\t\t\tconst matchingDocs = findMatchingDocs(doc.filter);\n\t\n\t\t\t\t\tmatchingDocs.forEach(currentDoc => {\n\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(currentDoc);\n\n\t\t\t\t\t\t\tversionDoc._id = <any>{_id: versionDoc._id, __v: versionDoc.__v};\n\n\t\t\t\t\t\t\tversionOps.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: versionDoc\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\t// Delete old versions if __v >= 4\n\t\t\t\t\t\t\tif (versionDoc.__v >= 4) {\n\t\t\t\t\t\t\t\tdeleteOldVersionsOps.push({\n\t\t\t\t\t\t\t\t\tdeleteMany: {\n\t\t\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\t\t\t'_id._id': versionDoc._id._id,\n\t\t\t\t\t\t\t\t\t\t\t'_id.__v': { $lt: versionDoc.__v - 4 }\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t// Log the operation\n\t\t\t\t\t\tif (!bypassLogs && this.createLogs) {\n\t\t\t\t\t\t\tlogs.push({\n\t\t\t\t\t\t\t\tinsertOne: {\n\t\t\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\t\tid_document: currentDoc._id,\n\t\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([op, options])) < 200000 ? JSON.stringify([op, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\t\tmethod: opType,\n\t\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tbulkOps.push(op); // Add deleteMany operation to bulkOps\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\ttry {\n\t\t\t\tif (bulkOps.length) {\n\t\t\t\t\tlet monitor = new MonitorMongo('bulkWrite', this.collectionName, JSON.stringify([bulkOps.slice(-100), options]));\n\t\t\t\t\t\n\t\t\t\t\t// First, perform the main bulk operations on the collection\n\t\t\t\t\tconst mainResult = await ResolveIOServer.getMainDB().collection<T>(this.collectionName).bulkWrite(bulkOps, options);\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\n\t\t\t\t\t// Separate bulkWrite for versions (if any versioning is required)\n\t\t\t\t\tif (versionOps.length || deleteOldVersionsOps.length) {\n\t\t\t\t\t\tawait ResolveIOServer.getMainDB().collection<T>(this.versionCollection).bulkWrite([...versionOps, ...deleteOldVersionsOps]);\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\t// Separate bulkWrite for logs (if logging is enabled)\n\t\t\t\t\tif (!bypassLogs && logs.length) {\n\t\t\t\t\t\tawait Logs.bulkWrite(logs);\n\t\t\t\t\t}\n\t\t\n\t\t\t\t\tmonitor.finish();\n\t\n\t\t\t\t\tresolve(mainResult); // Resolve with the result of the main bulkWrite\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconsole.log(new Date(), 'Error Bulk Write', this.collectionName, bulkOps.slice(-100), options, err);\n\t\t\t\treject(err);\n\t\t\t}\n\t\t});\n\t}\n\n\tcountDocuments(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: CountDocumentsOptions): Promise<number> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('countDocuments', this.collectionName, JSON.stringify([filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).countDocuments(<any>filter, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Count Documents', this.collectionName, filter, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\t//Helper Function (1 or Many) - Not Real Mongo Function\n\tcreate(f_docs: T | T[], options?: InsertOneOptions | BulkWriteOptions): Promise<T | T[]> {\n\t\tif (!Array.isArray(f_docs)) {\n\t\t\treturn this.insertOne(f_docs, <InsertOneOptions>options);\n\t\t}\n\t\telse if (f_docs.length === 1) {\n\t\t\treturn this.insertOne(f_docs[0], <InsertOneOptions>options);\n\t\t}\n\n\t\treturn this.insertMany(f_docs, <BulkWriteOptions>options);\n\t}\n\n\tcreateIndex(fieldOrSpec: any, options?: CreateIndexesOptions): Promise<string> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tMongoManagerCollection.indexQueue.push({\n\t\t\t\taction: 'createIndex',\n\t\t\t\tcollection: this, // Current instance\n\t\t\t\tspecs: [fieldOrSpec],\n\t\t\t\toptions: options\n\t\t\t}, (err, result) => {\n\t\t\t\tif (err) reject(err);\n\t\t\t\telse resolve(result);\n\t\t\t});\n\t\t});\n\t}\n\t\n\tcreateIndexes(indexSpecs: IndexDescription[], options?: CreateIndexesOptions): Promise<string[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tMongoManagerCollection.indexQueue.push({\n\t\t\t\taction: 'createIndexes',\n\t\t\t\tcollection: this, // Current instance\n\t\t\t\tspecs: [indexSpecs],\n\t\t\t\toptions: options\n\t\t\t}, (err, result) => {\n\t\t\t\tif (err) reject(err);\n\t\t\t\telse resolve(result);\n\t\t\t});\n\t\t});\n\t}\n\n\tdeleteMany(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: DeleteOptions, bypassLogs = false): Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tlet docs = await this.find(filter);\n\n\t\t\t\tfor (let i = 0; i < docs.length; i++) {\n\t\t\t\t\tlet doc = docs[i];\n\t\t\t\t\n\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'deleteMany',\n\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\troute: ''\n\t\t\t\t\t});\n\n\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 1}}]});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('deleteMany', this.collectionName, JSON.stringify([filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).deleteMany(<any>filter, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\tresolve(res.deletedCount);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Delete Many', this.collectionName, filter, options, err);\n\t\t\t\treject(err)\n\t\t\t});\n\t\t});\n\t}\n\n\tdeleteOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOneAndDeleteOptions, bypassLogs = false): Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tlet monitor = new MonitorMongo('findOneAndDelete', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndDelete(<any>filter, options).then(async returnVal => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tlet doc = returnVal;\n\n\t\t\t\t\tif (doc) {\n\t\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'deleteOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\t\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 1}}]});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\n\t\t\t\t\t\tresolve(1);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresolve(0);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Find One And Delete', this.collectionName, filter, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = new MonitorMongo('deleteOne', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).deleteOne(<any>filter, options).then(res => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\tresolve(res.deletedCount);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Delete One', this.collectionName, filter, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\t\t\t\n\t\t});\n\t}\n\n\tdistinct(key: string, filter?: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, options?: CommandOperationOptions): Promise<T[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('distinct', this.collectionName, JSON.stringify([key, filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).distinct(key, <any>filter, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Distinct', this.collectionName, filter, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tdrop(options?: CommandOperationOptions): Promise<boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('drop', this.collectionName, JSON.stringify([options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).drop(options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Count Documents', this.collectionName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tdropIndex(indexName: string, options?: CommandOperationOptions): Promise<Document> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('dropIndex', this.collectionName, JSON.stringify([indexName, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).dropIndex(indexName, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(<Document>res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Drop Index', this.collectionName, indexName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tdropIndexes(options?: CommandOperationOptions): Promise<Boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('dropIndexes', this.collectionName, JSON.stringify([options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).dropIndexes(options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Drop Indexes', this.collectionName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tfind(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, skipCache = false): Promise<T[]> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().addToQueue({\n\t\t\t\t\t_id: 0,\n\t\t\t\t\tname_collection: this.collectionName,\n\t\t\t\t\tname_function: 'find',\n\t\t\t\t\tname_function_addt: 'toArray',\n\t\t\t\t\tdata_function: [filter, options],\n\t\t\t\t\tdata_function_addt: [],\n\t\t\t\t\tcbs: [(err, res, cached) => {\t\t\t\t\t\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t\t}\n\t\t\t\t\t}],\n\t\t\t\t\tcbs_next: [],\n\t\t\t\t\trunning: false,\n\t\t\t\t\tcacheId: 0,\n\t\t\t\t\tlookup_collections: [],\n\t\t\t\t\tinvalidateFlag: false,\n\t\t\t\t\tinvalidateCount: 0\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = new MonitorMongo('find', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find<T>(<any>filter, options).toArray().then(res => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Find', this.collectionName, filter, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tfindById(id: string, options?: FindOptions<T>): Promise<T> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('findById', this.collectionName, JSON.stringify([{_id: id}, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOne<T>(<any>{_id: id}, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find By Id', this.collectionName, {_id: id}, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tfindCount(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>): Promise<Number> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('findCount', this.collectionName, JSON.stringify([filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options).count().then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find Count', this.collectionName, filter, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tfindCursor(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>): FindCursor {\n\t\tlet monitor = new MonitorMongo('findCursor', this.collectionName, JSON.stringify([filter, options]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options);\n\t\tcursor.on('close', ev => {\n\t\t\tmonitor.finish();\n\t\t\tcursor.removeAllListeners();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn cursor;\n\t}\n\n\tfindStream(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, streamOptions?: CursorStreamOptions) {\n\t\tlet monitor = new MonitorMongo('findStream', this.collectionName, JSON.stringify([filter, options, streamOptions]));\n\t\tlet stream = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).find(<any>filter, options).stream(streamOptions);\n\t\tstream.on('end', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t})\n\t\t.on('error', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t})\n\t\t.on('close', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn stream;\n\t}\n\n\tfindOne(filter: MongoManagerFilter<T> | MongoManagerFilterOperators<T> = {}, options?: FindOptions<T>, skipCache = false): Promise<T> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!skipCache) {\n\t\t\t\tResolveIOServer.getMongoManager().addToQueue({\n\t\t\t\t\t_id: 0,\n\t\t\t\t\tname_collection: this.collectionName,\n\t\t\t\t\tname_function: 'findOne',\n\t\t\t\t\tname_function_addt: '',\n\t\t\t\t\tdata_function: [filter, options],\n\t\t\t\t\tdata_function_addt: [],\n\t\t\t\t\tcbs: [(err, res, cached) => {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(res);\n\t\t\t\t\t\t}\n\t\t\t\t\t}],\n\t\t\t\t\tcbs_next: [],\n\t\t\t\t\trunning: false,\n\t\t\t\t\tcacheId: 0,\n\t\t\t\t\tlookup_collections: [],\n\t\t\t\t\tinvalidateFlag: false,\n\t\t\t\t\tinvalidateCount: 0\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet monitor = new MonitorMongo('findOne', this.collectionName, JSON.stringify([filter, options]));\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOne<T>(<any>filter, options).then(res => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tresolve(res);\n\t\t\t\t}, err => {\n\t\t\t\t\tmonitor.finish();\n\t\t\t\t\tconsole.log(new Date(), 'Error Find One', this.collectionName, filter, options, err);\n\t\t\t\t\treject(err)\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tfindOneAndDelete(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, options?: FindOneAndDeleteOptions, bypassLogs = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('findOneAndDelete', this.collectionName, JSON.stringify([filter, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndDelete(<any>filter, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tlet doc = res;\n\t\t\t\t\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, options])) < 200000 ? JSON.stringify([doc, filter, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndDelete',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t}\n\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\n\t\t\t\t\tresolve(<T>doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find One And Delete', this.collectionName, filter, options, err);\n\t\t\t\treject(err)\n\t\t\t});\n\t\t});\n\t}\n\n\tfindOneAndReplace(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, replacement: T, options?: FindOneAndReplaceOptions, bypassLogs = false, bypassCheckSchema = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(replacement);\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - findOneAndReplace', validation.validationErrors());\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on findOneAndReplace - ' + this.collectionName, [validation.validationErrors(), replacement]);\n\t\t\t\t\t\n\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tlet date = new Date();\n\n\t\t\tif (this.timestamps) {\n\t\t\t\treplacement.updatedAt = date;\n\t\t\t}\n\n\t\t\tif (options && options.upsert) {\n\t\t\t\tif (!replacement._id) {\n\t\t\t\t\treplacement._id = objectIdHexString();\n\t\t\t\t}\n\n\t\t\t\tif (this.useVersions) {\n\t\t\t\t\treplacement.__v = 0;\n\t\t\t\t}\n\n\t\t\t\tif (this.timestamps && !replacement.createdAt) {\n\t\t\t\t\treplacement.createdAt = date;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('findOneAndReplace', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndReplace(<any>filter, replacement, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tlet doc = res;\n\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndReplace',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t}\n\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\n\t\t\t\t\tresolve(<T>doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find One And Replace', this.collectionName, filter, options, err);\n\t\t\t\treject(err)\n\t\t\t});\n\t\t});\n\t}\n\n\tfindOneAndUpdate(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T> = {}, update: MongoManagerUpdateFilter<T>, options?: FindOneAndUpdateOptions, bypassLogs = false, bypassCheckSchema = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - findOneAndUpdate', validation.validationErrors());\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on findOneAndUpdate - ' + this.collectionName, [validation.validationErrors(), update]);\n\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.timestamps) {\n\t\t\t\tlet date = new Date(); \n\t\t\t\t\n\t\t\t\tif (!update.$set) {\n\t\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (options && options.upsert) {\n\t\t\t\tif (!update.$setOnInsert) {\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t_id: objectIdHexString()\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (!update.$setOnInsert._id) {\n\t\t\t\t\t\tupdate.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.timestamps && !update.$setOnInsert.createdAt) {\n\t\t\t\t\t\tupdate.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('findOneAndUpdate', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndUpdate(<any>filter, <any>update, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tlet doc = res;\n\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\t\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'findOneAndUpdate',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t}\n\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\n\t\t\t\t\tresolve(<T>doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Find One And Update', this.collectionName, filter, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tindexes(options: IndexInformationOptions): Promise<any[]> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('indexes', this.collectionName, JSON.stringify([options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).indexes(options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Indexes', this.collectionName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tindexExists(indexes: string | string[], options?: IndexInformationOptions): Promise<boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('indexExists', this.collectionName, JSON.stringify([indexes, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).indexExists(indexes, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Index Exists', this.collectionName, indexes, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tinsertMany(docs: T[], options?: BulkWriteOptions, bypassLogs = false, bypassCheckSchema = false, bypassMonitor = false): Promise<T[]> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!docs.length) {\n\t\t\t\tresolve([]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tlet validationResults = [];\n\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tdocs.forEach(doc => {\n\t\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\t\tconst isValid = validation.validate(doc);\n\n\t\t\t\t\tif (!isValid) {\n\t\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - insertMany', validation.validationErrors());\n\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on insertMany - ' + this.collectionName, [validation.validationErrors(), doc]);\n\t\t\t\t\t\tvalidationResults.push(false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tvalidationResults.push(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet validDocs = this.checkSchema ? docs.filter((a, idx) => validationResults[idx]) : docs;\n\n\t\t\tfor (let i = 0; i < validDocs.length; i++) {\n\t\t\t\tlet doc = validDocs[i];\n\n\t\t\t\tif (!doc._id) {\n\t\t\t\t\tdoc._id = objectIdHexString();\n\t\t\t\t}\n\n\t\t\t\tif (this.timestamps) {\n\t\t\t\t\tlet date = new Date();\n\n\t\t\t\t\tif (!doc.createdAt) {\n\t\t\t\t\t\tdoc.createdAt = date;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!doc.updatedAt) {\n\t\t\t\t\t\tdoc.updatedAt = date;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.useVersions && !doc.hasOwnProperty('__v')) {\n\t\t\t\t\tdoc.__v = 0;\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, options])) < 200000 ? JSON.stringify([doc, options], null, 2) : 'Too Big',\n\t\t\t\t\t\tmethod: 'insertMany',\n\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\troute: ''\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (validDocs.length) {\n\t\t\t\tlet monitor = null;\n\t\t\t\t\n\t\t\t\tif (!bypassMonitor) {\n\t\t\t\t\tmonitor = new MonitorMongo('insertMany', this.collectionName, JSON.stringify([validDocs, options]));\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).insertMany(<OptionalUnlessRequiredId<T>[]>validDocs, options).then(res => {\n\t\t\t\t\tif (monitor) {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t}\n\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\tresolve(validDocs);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tif (monitor) {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t}\n\t\t\t\t\tconsole.log(new Date(), 'Error Insert Many', this.collectionName, validDocs, options, err);\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tinsertOne(doc: T, options?: InsertOneOptions, bypassLogs = false, bypassCheckSchema = false): Promise<T> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!doc._id) {\n\t\t\t\tdoc._id = objectIdHexString();\n\t\t\t}\n\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(doc);\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - insertOne', validation.validationErrors());\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on insertOne - ' + this.collectionName, [validation.validationErrors(), doc]);\n\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.timestamps) {\n\t\t\t\tlet date = new Date();\n\t\t\t\n\t\t\t\tif (!doc.createdAt) {\n\t\t\t\t\tdoc.createdAt = date;\n\t\t\t\t}\n\n\t\t\t\tif (!doc.updatedAt) {\n\t\t\t\t\tdoc.updatedAt = date;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\tLogs.insertOne({\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\ttype: 'document',\n\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, options])) < 200000 ? JSON.stringify([doc, options], null, 2) : 'Too Big',\n\t\t\t\t\tmethod: 'insertOne',\n\t\t\t\t\tid_user: '',\n\t\t\t\t\tuser: '',\n\t\t\t\t\tmessageId: 0,\n\t\t\t\t\troute: ''\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.useVersions && !doc.hasOwnProperty('__v')) {\n\t\t\t\tdoc.__v = 0;\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('insertOne', this.collectionName, JSON.stringify([doc, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).insertOne(<OptionalUnlessRequiredId<T>>doc, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\tresolve(doc);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Insert One', this.collectionName, doc, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\tlistIndexes(options?: ListIndexesOptions): ListIndexesCursor {\n\t\tlet monitor = new MonitorMongo('listIndexes', this.collectionName, JSON.stringify([options]));\n\t\tlet cursor = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).listIndexes(options);\n\t\tcursor.on('close', ev => {\n\t\t\tmonitor.finish();\n\t\t\treturn ev;\n\t\t});\n\n\t\treturn cursor;\n\t}\n\n\trename(newName: string, options?: RenameOptions): Promise<Collection<Document>> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet monitor = new MonitorMongo('rename', this.collectionName, JSON.stringify([newName, options]));\n\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).rename(newName, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tresolve(res);\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Rename', this.collectionName, newName, options, err);\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t}\n\n\treplaceOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, replacement: T, options?: ReplaceOptions, bypassLogs = false, bypassCheckSchema = false, doc: T = null) : Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(replacement);\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - replaceOne', validation.validationErrors());\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on replaceOne - ' + this.collectionName, [validation.validationErrors(), replacement]);\n\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tlet date = new Date();\n\t\t\t\n\t\t\tif (this.timestamps) {\n\t\t\t\treplacement.updatedAt = date;\n\t\t\t}\n\n\t\t\tif (this.useVersions) {\n\t\t\t\tif (!doc) {\n\t\t\t\t\tdoc = await this.findOne(<any>filter, null, true);\n\t\t\t\t}\n\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.timestamps && !replacement.createdAt && doc.createdAt) {\n\t\t\t\t\t\treplacement.createdAt = doc.createdAt;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (doc.__v === replacement.__v) {\n\t\t\t\t\t\treplacement.__v += 1;\n\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\n\t\t\t\t\t\tif (doc.__v >= 4) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 4}}]});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet monitor = new MonitorMongo('replaceOne', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options).then(res => {\n\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\tconsole.log(new Date(), 'Error Replace One', this.collectionName, filter, replacement, options, err);\n\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tconsole.log('invalid version - ' + this.collectionName, doc.__v, replacement.__v);\n\n\t\t\t\t\t\tlet prevDoc = await ResolveIOServer.getMongoManager().collection(this.versionCollection).findOne({\n\t\t\t\t\t\t\t_id: <any>{\n\t\t\t\t\t\t\t\t_id: doc._id,\n\t\t\t\t\t\t\t\t__v: replacement.__v\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, null, true);\n\n\t\t\t\t\t\tif (prevDoc) {\n\t\t\t\t\t\t\tlet docId = doc._id;\n\t\t\t\t\t\t\tlet docVersion = doc.__v;\n\t\t\t\t\t\t\tlet updatedDoc: T = getMongoMergeUpdatedDoc(replacement, doc, prevDoc);\n\t\t\t\t\t\t\tupdatedDoc._id = docId;\n\t\t\t\t\t\t\tupdatedDoc.__v = docVersion + 1;\n\n\t\t\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\t\tid_document: docId,\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, options])) < 200000 ? JSON.stringify(['invalidVersion - merge', doc, filter, updatedDoc, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet monitor = new MonitorMongo('replaceOne', this.collectionName, JSON.stringify([filter, updatedDoc, options]));\n\t\t\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, updatedDoc, options).then(res => {\n\t\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, err => {\n\t\t\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\t\t\tconsole.log(new Date(), 'Error Replace One', this.collectionName, filter, updatedDoc, options, err);\n\t\t\t\t\t\t\t\treject(err);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject('Invalid Version And Could Not Find History - DB: ' + doc.__v + ', Trying to update with :' + replacement.__v);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (options && options.upsert) {\n\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\treplacement.createdAt = date;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!replacement._id) {\n\t\t\t\t\t\treplacement._id = objectIdHexString();\n\t\t\t\t\t}\n\n\t\t\t\t\treplacement.__v = 0;\n\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: replacement._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, options])) < 200000 ? JSON.stringify(['upsert', filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet monitor = new MonitorMongo('replaceOne', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Replace One', this.collectionName, filter, replacement, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject('No Document');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (options && options.upsert) {\n\t\t\t\t\tif (this.timestamps && !replacement.createdAt) {\n\t\t\t\t\t\treplacement.createdAt = date;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!replacement._id) {\n\t\t\t\t\t\treplacement._id = objectIdHexString();\n\t\t\t\t\t}\n\n\t\t\t\t\treplacement.__v = 0;\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (!options) {\n\t\t\t\t\t\toptions = <FindOneAndReplaceOptions>{returnDocument: 'before'};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t(<FindOneAndReplaceOptions>options).returnDocument = 'before';\n\t\t\t\t\t}\n\n\t\t\t\t\tlet monitor = new MonitorMongo('findOneAndReplace', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).findOneAndReplace(<any>filter, replacement, <FindOneAndReplaceOptions>options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tlet doc = res;\n\n\t\t\t\t\t\tif (doc) {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: <string>doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, replacement, options])) < 200000 ? JSON.stringify([doc, filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: replacement._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, replacement, options])) < 200000 ? JSON.stringify(['upsert', filter, replacement, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'replaceOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\tresolve(1);\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Find One And Replace', this.collectionName, filter, replacement, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet monitor = new MonitorMongo('replaceOne', this.collectionName, JSON.stringify([filter, replacement, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).replaceOne(<any>filter, replacement, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Replace One', this.collectionName, filter, replacement, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tupdateMany(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, update: MongoManagerUpdateFilter<T>, options?: UpdateOptions, bypassLogs = false, bypassCheckSchema = false, bypassVersions = false) : Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif ((!update.$inc || JSON.stringify(update.$inc) === '{}') && (!update.$set || JSON.stringify(update.$set) === '{}') && (!update.$setOnInsert || JSON.stringify(update.$setOnInsert) === '{}') && (!update.$unset || JSON.stringify(update.$unset) === '{}')) {\n\t\t\t\tresolve(1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif (this.timestamps) {\n\t\t\t\tlet date = new Date();\n\n\t\t\t\tif (!update.$set) {\n\t\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\n\t\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - updateMany', validation.validationErrors());\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on updateMany - ' + this.collectionName, [validation.validationErrors(), update]);\n\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ((this.useVersions && !bypassVersions) || (this.createLogs && !bypassLogs)) {\n\t\t\t\tlet docs = await this.find(filter);\n\t\n\t\t\t\tfor (let i = 0; i < docs.length; i++) {\n\t\t\t\t\tlet doc = docs[i];\n\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateMany',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.useVersions) {\n\t\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\t\t\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (doc.__v >= 4) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 4}}]});\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\tif (!objectContainsPropertyDeep(update, '__v')) {\n\t\t\t\t\t\t\tif (!update.$inc) {\n\t\t\t\t\t\t\t\tupdate.$inc = {__v: 1};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (!update.$inc.__v) {\n\t\t\t\t\t\t\t\tupdate.$inc.__v = 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet monitor = new MonitorMongo('updateMany', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateMany(<any>filter, update, options).then(res => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t}\n\t\t\t}, err => {\n\t\t\t\tmonitor.finish();\n\t\t\t\tconsole.log(new Date(), 'Error Update Many', this.collectionName, filter, update, options, err);\n\t\t\t\treject(err)\n\t\t\t});\n\t\t});\n\t}\n\n\tupdateOne(filter: MongoManagerFilter<T> & MongoManagerFilterOperators<T>, update: MongoManagerUpdateFilter<T>, options?: UpdateOptions, bypassLogs = false, bypassCheckSchema = false) : Promise<number> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (this.checkSchema && !bypassCheckSchema) {\n\t\t\t\tconst validation = this.simplschema.newContext();\t\t\t\n\t\t\t\tconst isValid = validation.validate(update, {modifier: true});\n\n\t\t\t\tif (!isValid) {\n\t\t\t\t\tconsole.log(new Date(), this.collectionName, 'Schema Errors - updateOne', validation.validationErrors());\n\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().callMethodInternal.call(ResolveIOServer.getMainServer().getMethodManager(), 'insertErrorLog', 'Schema Failed on updateOne - ' + this.collectionName, [validation.validationErrors(), update]);\n\t\t\t\t\treject(validation.validationErrors());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ((!update.$inc || JSON.stringify(update.$inc) === '{}') && (!update.$set || JSON.stringify(update.$set) === '{}') && (!update.$setOnInsert || JSON.stringify(update.$setOnInsert) === '{}') && (!update.$unset || JSON.stringify(update.$unset) === '{}')) {\n\t\t\t\tresolve(1);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet date = new Date();\n\n\t\t\tif (this.timestamps) {\n\t\t\t\tif (!update.$set) {\n\t\t\t\t\tupdate.$set = <any>{updatedAt: date};\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tupdate.$set.updatedAt = date;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif (this.useVersions) {\n\t\t\t\tlet doc = await this.findOne(filter, null, true);\n\n\t\t\t\tif (doc) {\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: doc._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tlet versionDoc = deepCopy(doc);\n\t\t\t\t\tversionDoc._id = {_id: doc._id, __v: doc.__v};\n\t\n\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).replaceOne(<any>{_id: { _id: doc._id, __v: doc.__v}}, versionDoc, {upsert: true});\n\t\t\t\t\t\n\t\t\t\t\tif (doc.__v >= 4) {\n\t\t\t\t\t\tResolveIOServer.getMongoManager().collection(this.versionCollection).deleteMany(<any>{$and: [{'_id._id': doc._id}, {'_id.__v': {$lt: doc.__v - 4}}]});\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (!objectContainsPropertyDeep(update, '__v')) {\n\t\t\t\t\t\tif (!update.$inc) {\n\t\t\t\t\t\t\tupdate.$inc = {__v: 1};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (!update.$inc.__v) {\n\t\t\t\t\t\t\tupdate.$inc.__v = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet monitor = new MonitorMongo('updateOne', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Update One', this.collectionName, filter, update, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse if (options && options.upsert) {\n\t\t\t\t\tif (!update.$setOnInsert) {\n\t\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t__v: 0\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (!update.$setOnInsert._id) {\n\t\t\t\t\t\t\tupdate.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (this.timestamps && !update.$setOnInsert.createdAt) {\n\t\t\t\t\t\t\tupdate.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\tid_document: update.$setOnInsert._id,\n\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, options])) < 200000 ? JSON.stringify(['upsert', filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet monitor = new MonitorMongo('updateOne', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Update One', this.collectionName, filter, update, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treject('No Document');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (options && options.upsert) {\n\t\t\t\t\tif (!update.$setOnInsert) {\n\t\t\t\t\t\tif (this.timestamps) {\n\t\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\tcreatedAt: new Date()\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tupdate.$setOnInsert = <any>{\n\t\t\t\t\t\t\t\t_id: objectIdHexString()\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (!update.$setOnInsert._id) {\n\t\t\t\t\t\t\tupdate.$setOnInsert._id = objectIdHexString();\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (this.timestamps && !update.$setOnInsert.createdAt) {\n\t\t\t\t\t\t\tupdate.$setOnInsert.createdAt = new Date();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.createLogs && !bypassLogs) {\n\t\t\t\t\tif (!options) {\n\t\t\t\t\t\toptions = <FindOneAndUpdateOptions>{returnDocument: 'before'};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t(<FindOneAndUpdateOptions>options).returnDocument = 'before';\n\t\t\t\t\t}\n\n\t\t\t\t\tlet monitor = new MonitorMongo('findOneAndUpdate', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).findOneAndUpdate(<any>filter, update, <FindOneAndUpdateOptions>options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tlet doc = res.value;\n\n\t\t\t\t\t\tif (doc) {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: <any>doc._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify([doc, filter, update, options])) < 200000 ? JSON.stringify([doc, filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tresolve(res.ok);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (update.$setOnInsert) {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'document',\n\t\t\t\t\t\t\t\tcollection: this.collectionName,\n\t\t\t\t\t\t\t\tid_document: update.$setOnInsert._id,\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(['upsert', filter, update, options])) < 200000 ? JSON.stringify(['upsert', filter, update, options], null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: 'updateOne',\n\t\t\t\t\t\t\t\tid_user: '',\n\t\t\t\t\t\t\t\tuser: '',\n\t\t\t\t\t\t\t\tmessageId: 0,\n\t\t\t\t\t\t\t\troute: ''\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\n\t\t\t\t\t\t\tresolve(res.ok);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tresolve(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Find One And Update', this.collectionName, filter, update, options, err);\n\t\t\t\t\t\treject(err)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet monitor = new MonitorMongo('updateOne', this.collectionName, JSON.stringify([filter, update, options]));\n\t\t\t\t\tResolveIOServer.getMainDB().collection(this.collectionName, this.collectionOptions).updateOne(<any>filter, update, options).then(res => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tif (res.acknowledged) {\n\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(this.collectionName);\n\t\t\t\t\t\t\tresolve(res.modifiedCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treject(res.acknowledged);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, err => {\n\t\t\t\t\t\tmonitor.finish();\n\t\t\t\t\t\tconsole.log(new Date(), 'Error Update One', this.collectionName, filter, update, options, err);\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t\n\twatchCollection(pipeline = [], options?: ChangeStreamOptions): ChangeStream<T> {\n\t\tlet stream = ResolveIOServer.getMainDB().collection<T>(this.collectionName, this.collectionOptions).watch(pipeline, options);\n\t\treturn <ChangeStream<T>>stream;\n\t}\n}\n\nexport class MongoManagerUserCollection<T extends CollectionDocument> extends MongoManagerCollection<T> {\n\tauthenticate(user: UserModel, password: string): Promise<{data: UserModel, error: string}> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tconst attemptsInterval = Math.pow(100, Math.log(user.attempts + 1));\n\t\t\tconst calculatedInterval = attemptsInterval < 300000 ? attemptsInterval : 300000;\n\t\t\n\t\t\tif (user.last) {\n\t\t\t\tif (Date.now() - user.last.getTime() < calculatedInterval) {\n\t\t\t\t\tuser.last = new Date();\n\t\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last}});\n\t\t\t\t\tresolve({\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\terror: 'Attempt Too Soon'\n\t\t\t\t\t});\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tuser.last = new Date();\n\t\t\t}\n\t\t\n\t\t\tif (user.attempts >= 5) {\n\t\t\t\tresolve({\n\t\t\t\t\tdata: null,\n\t\t\t\t\terror: 'Too Many Attempts'\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tif (!user.salt) {\n\t\t\t\tresolve({\n\t\t\t\t\tdata: null,\n\t\t\t\t\terror: 'No Salt Value Stored'\n\t\t\t\t});\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tpbkdf2(password, user.salt, {\n\t\t\t\titerations: 25000,\n\t\t\t\tkeylen: 512,\n\t\t\t\tdigestAlgorithm: 'sha256'\n\t\t\t}, async (err, hashBuffer) => {\n\t\t\t\tif (err) {\n\t\t\t\t\treturn reject(err);\n\t\t\t\t}\n\t\t\t\n\t\t\t\tif (scmp(hashBuffer, Buffer.from(user.hash, 'hex'))) {\n\t\t\t\t\tuser.last = new Date();\n\t\t\t\t\tuser.attempts = 0;\n\t\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last, attempts: user.attempts}});\n\n\t\t\t\t\tresolve({\n\t\t\t\t\t\tdata: user,\n\t\t\t\t\t\terror: ''\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tuser.last = new Date();\n\t\t\t\t\tuser.attempts = user.attempts + 1;\n\t\t\t\t\tawait Users.updateOne({_id: user._id}, {$set: {last: user.last, attempts: user.attempts}});\n\n\t\t\t\t\tif (user.attempts >= 5) {\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t\terror: 'Too Many Attempts'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tresolve({\n\t\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\t\terror: 'Invalid Username And Password'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} \n\t\t\t});\n\t\t});\n\t}\n\n\tserializeUser() {\n\t\treturn (user, cb) => {\n\t\t\tcb(null, user.username);\n\t\t};\n\t}\n\n\tdeserializeUser() {\n\t\treturn (username, cb) => {\n\t\t\tUsers.findOne({username: username}).then(res => {\n\t\t\t\tcb(null, res);\n\t\t\t}, err => {\n\t\t\t\tcb(err, null);\n\t\t\t});\n\t\t};\n\t}\n\n\tsetPassword(user: UserModel, password: string) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!user) {\n\t\t\t\treject('No User');\n\t\t\t}\n\t\t\telse if (!password) {\n\t\t\t\treject('No Password');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet saltBuffer = await randomBytes(32);\n\t\t\t\tlet salt = saltBuffer.toString('hex');\n\t\t\t\tlet hashRaw = await pbkdf2Promisified(password, salt, {\n\t\t\t\t\titerations: 25000,\n\t\t\t\t\tkeylen: 512,\n\t\t\t\t\tdigestAlgorithm: 'sha256'\n\t\t\t\t});\n\t\t\t\tlet hash = Buffer.from(hashRaw, 'binary').toString('hex');\n\t\t\t\tUsers.updateOne({_id: user._id}, {$set: {hash: hash, salt: salt, services: {}, attempts: 0}}).then(res => resolve(res), rej => reject(rej));\n\t\t\t}\n\t\t});\n\t};\n\n\tchangePassword(user, oldPassword, newPassword) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!user) {\n\t\t\t\treject('Missing User');\n\t\t\t}\n\t\t\telse if (!oldPassword || !newPassword) {\n\t\t\t\treject('Missing Password');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet authUser = await this.authenticate(user, oldPassword);\n\n\t\t\t\tif (!authUser['data']) {\n\t\t\t\t\treject(authUser['error']);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.setPassword(user, newPassword).then(res => resolve(res), rej => reject(rej));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t\n\tregister(user, password) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\tif (!user.username) {\n\t\t\t\treject('Missing Username');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet dbUser = await Users.findOne({username: user.username});\n\t\t\t\t\n\t\t\t\tif (dbUser) {\n\t\t\t\t\treject('Username Exists');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tdbUser = await Users.findOne({email: user.email});\n\n\t\t\t\t\tif (dbUser) {\n\t\t\t\t\t\treject('Email Exists');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tuser.setPassword(password);\n\t\t\t\t\t\tresolve(user);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tresetAttempts(user: UserModel) {\n\t\treturn Users.updateOne({_id: user._id}, {$set: {attempts: 0}});\n\t}\n}\n\nexport function objectIdHexString() {\n\tlet objectId = new ObjectId();\n\treturn objectId.toHexString();\n}\n\nfunction pbkdf2(password, salt, options, callback) {\n\tcrypto.pbkdf2(password, salt, options.iterations, options.keylen, options.digestAlgorithm, callback);\n};\n\nfunction pbkdf2Promisified(password, salt, options): Promise<any> {\n\treturn new Promise((resolve, reject) => pbkdf2(password, salt, options, (err, hashRaw) => (err ? reject(err) : resolve(hashRaw))));\n}\n\nfunction randomBytes(saltlen): Promise<Buffer> {\n\treturn new Promise((resolve, reject) => crypto.randomBytes(saltlen, (err, saltBuffer) => (err ? reject(err) : resolve(saltBuffer))));\n}\n\nfunction objectContainsPropertyDeep(obj: Object, prop: string) {\n\tlet keys = Object.keys(obj);\n\n\tif (keys.some(a => a === prop)) {\n\t\treturn true;\n\t}\n\t\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tlet key = keys[i];\n\t\tif (obj[key] && typeof obj[key] === 'object' && objectContainsPropertyDeep(obj[key], prop)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}"]}