-
Type:
Bug
-
Resolution: Done
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: JavaScript
-
None
-
ALL
-
None
-
None
-
None
-
None
-
None
-
None
-
None
The details are at http://stackoverflow.com/questions/33873213/mongo-shell-update-causes-typeerror-object-is-not-a-function-at-mongo-getdb
var config = { marketingDB: 'localhost:27017/marketing', feedbackDB: 'localhost:27017/feedback', teleporterDB: 'localhost:27017/teleporter', batchSz: 1000 }; var DB = { marketingDB: connect(config.marketingDB), feedbackDB: connect(config.feedbackDB), teleporterDB: connect(config.teleporterDB) }; function Datasegment() { var db = DB.teleporterDB; var datasegmentCollectionObjects = {}; function init() { var collectionNames = db.getCollectionNames(); for (var i in collectionNames) { var datasegmentName = collectionNames[i]; datasegmentCollectionObjects[datasegmentName] = db[datasegmentName] } }; this.getCollection = function(dataSegmentName) { return datasegmentCollectionObjects[dataSegmentName]; }; init(); }; function Template() { var db = DB.marketingDB; this.findAllTemplateDataSnapshotMap = function() { var results = {}; db.template.find().forEach( function(rec){ if(rec.data_snapshot_id) { results[rec._id] = rec.data_snapshot_id; } }); return results; }; } function Runbook() { var db = DB.feedbackDB; var datasegment = new Datasegment(); var template = new Template(); this.merge = function() { var templateIdDatasegmentNameMap = template.findAllTemplateDataSnapshotMap(); printjson(templateIdDatasegmentNameMap); var jobDataSegmentMapping = getJobIdDataSegmentMapping(templateIdDatasegmentNameMap); printjson(jobDataSegmentMapping); mergeAllTeleporterDataToRunbook(jobDataSegmentMapping); }; function getRunbookCollection(jobId) { return db[jobId]; } function getRunbookCollectionWrite(jobId) { return writeDB[jobId]; } function getRequestRowIndexInDataSegment(channel, requestId) { var lastPos = requestId.lastIndexOf("_"); var idx = 0; if (channel == 'push') { var usualReqId = requestId.substring(lastPos + 1, requestId.length - 1); var lastToLastPos = usualReqId.lastIndexOf("_"); idx = usualReqId.substring(lastToLastPos + 1, requestId.length - 1); } else { idx = requestId.substring(lastPos + 1, requestId.length - 1); } return idx; } function getRequestRowInDataSegment(datasegmentCollection, index) { return datasegmentCollection.find().skip(index).limit(1).next() } function mergeTeleporterDataToRunbook(jobId, runbookCollection, datasegmentCollection ) { if (!runbookCollection || !datasegmentCollection) { return; // fall back to do nothing } try { var sz = runbookCollection.find().count(); var offset = 0; while (offset <= sz) { var batchData = []; runbookCollection.find().skip(offset).limit(config.batchSz).forEach(function(ref) { if (ref.user_id) { // this is already populated. No need throw 100; } var index = getRequestRowIndexInDataSegment(ref.channel, ref.request_id); var datasegmentRow = getRequestRowInDataSegment(datasegmentCollection, index); var info = {}; if (datasegmentRow.user_id) { info['user_id'] = datasegmentRow.user_id; } if(ref.channel === 'sms') { if (datasegmentRow.phone) { info['phone'] = datasegmentRow.phone; } } if(ref.channel === 'email') { if (datasegmentRow.email) { info['email'] = datasegmentRow.email; } } //runbookCollection.update({request_id : ref.request_id}, { $set : info }); batchData.push({request_id: ref.request_id, info: info}); } ); for (var i in batchData) { var ref = batchData[i]; // this is the line with error runbookCollection.update({request_id : ref.request_id}, { $set : ref.info }); } offset = offset + batchData.length; batchData = []; } } catch (err) { if (err !== 100) throw err; } printjson("Done with " + jobId); } function mergeAllTeleporterDataToRunbook(jobDataSegmentMapping) { //printjson(jobDataSegmentMapping); for (var jobId in jobDataSegmentMapping) { var dataSegmentName = jobDataSegmentMapping[jobId]; var runbookCollection = getRunbookCollection(jobId); var datasegmentCollection = datasegment.getCollection(dataSegmentName); mergeTeleporterDataToRunbook(jobId, runbookCollection, datasegmentCollection); } }
Error:
2015-11-23T20:39:12.674+0530 E QUERY TypeError: object is not a function
at Mongo.getDB (src/mongo/shell/mongo.js:41:12)
at Mongo.hasWriteCommands (src/mongo/shell/mongo.js:204:29)
at Mongo.writeMode (src/mongo/shell/mongo.js:244:15)
at DBCollection.update (src/mongo/shell/collection.js:443:26)
at mergeTeleporterDataToRunbook (copy_user_info.mongo:154:31)
at mergeAllTeleporterDataToRunbook (copy_user_info.mongo:173:7)
at Runbook.merge (copy_user_info.mongo:66:5)
at copy_user_info.mongo:190:15 at copy_user_info.mongo:160
failed to load: copy_user_info.mongo