-
-
Save codepope/8847630 to your computer and use it in GitHub Desktop.
| var mqtt=require('mqtt'); | |
| var mongodb=require('mongodb'); | |
| var mongodbClient=mongodb.MongoClient; | |
| var mongodbURI='mongodb://username:[email protected]:port/database'; | |
| var deviceRoot="demo/device/"; | |
| var collection,client; | |
| mongodbClient.connect(mongodbURI,setupCollection); | |
| function setupCollection(err,db) { | |
| if(err) throw err; | |
| collection=db.collection("test_mqtt"); | |
| client=mqtt.createClient(1883,'localhost'); | |
| client.subscribe(deviceRoot+"+"); | |
| client.on('message', insertEvent); | |
| } | |
| function insertEvent(topic,message) { | |
| var key=topic.replace(deviceRoot,''); | |
| collection.update( | |
| { _id:key }, | |
| { $push: { events: { event: { value:message, when:new Date() } } } }, | |
| { upsert:true }, | |
| function(err,docs) { | |
| if(err) { | |
| console.log("Insert fail"); // Improve error handling | |
| } | |
| } | |
| ); | |
| } | |
On what line?
On what line?
Line 14. Tried after installing mqtt and mongodb from npm. It looks like a db is never passed to the function.
After further investigation and looking at the age of this gist, looks like a version mismatch. https://stackoverflow.com/questions/47662220/db-collection-is-not-a-function-when-using-mongoclient-v3-0
It gets past this point if you used mongodb@2 on the npm install. It then errors out on createClient as not being a function, so its likely that the mqtt library has changed some too. @Shivsk007 check your versions.
Dropping mongodb to 2 and mqtt to 1 got me running with "createClient is deprecated, use connect instead" displayed.
Getting mine working with current versions, tho this gist should probably be a full on project to include a package.json or have comments with the versions to install at the top.
Not being whiny, this code is 6 years old and clearly still useful :D Thanks for the work!
Yes, this is quite old code and the Mongo libraries changed somewhat....
Roughly where it hands over a db in setupCollextion, now it hands over a MongoDB client. You can then get the db with client.db("dbname")....
The rest should work fine though I'd write it completely differently now.
if i run this program, its showing error TypeError: db.collection is not a function