我有一个使用node.js,express和串口编写的小型Web服务器,它会不断地通过USB监听连接到mac的温度传感器。代码如下:
var serialport = require("serialport"), // include the serialport library
SerialPort = serialport.SerialPort, // make a local instance of serial
app = require('express')(), // start Express framework
server = require('http').createServer(app), // start an HTTP server
io = require('socket.io').listen(server); // filter the server using socket.io
var mongo = require('mongodb');
var Server = mongo.Server,
Db = mongo.Db,
BSON = mongo.BSONPure;
var server = new Server('localhost', 27017, {auto_reconnect: true});
db = new Db('sensordatabase', server);
db.open(function(err, db) {
if(!err) {
console.log("Connected to 'sensordatabase' database");
db.collection('tempsensor', {safe:true}, function(err, collection) {
if (err) {
console.log("The 'values' collection doesn't exist. Creating it with sample data...");
}
});
}
});
var serialData = {}; // object to hold what goes out to the client
server.listen(8080); // listen for incoming requests on the server
console.log("Listening for new clients on port 8080");
// open the serial port. Change the name to the name of your port, just like in Processing and Arduino:
var myPort = new SerialPort("/dev/cu.usbmodem5d11", {
// look for return and newline at the end of each data packet:
parser: serialport.parsers.readline("\r\n")
});
// respond to web GET requests with the index.html page:
app.get('/', function (request, response) {
myPort.on('data', function (data) {
// set the value property of scores to the serial string:
serialData.value = data;
response.send(data);
// for debugging, you should see this in Terminal:
console.log(data);
});
});
从上面的代码可以看出,我的传感器值存储在“数据”中。
现在我想将这些数据保存到我的tempsensor集合中,该集合具有以下格式:
{
"Physicalentity": "Temperature",
"Unit": "Celsius",
"value": "",
"time": "",
"date": ""
},
我的问题是:
1:如何使用node.js的mongodb驱动程序保存值对象中的“数据”? 2:如何添加自动添加数据的时间?
我知道日期有一个名为new Date()
的函数,是否有类似的时间函数?
我真的很感激任何帮助。
提前感谢。
答案 0 :(得分:1)
您可以执行以下操作,将文档插入到收藏夹中。
db.collection('tempsensor',{safe:true}, function(err, collection) {
collection.insert({
"Physicalentity": "Temperature",
"Unit": "Celsius",
"value": "",
"time": "",
"date": ""
}, function(err, doc) {
if(err){
console.log("Error on document insert");
}else{
//Document saved succesfuly
}
});
});
答案 1 :(得分:1)
> db.c.insert({'date': new Date(), 'time_hours': new Date().getHours(), 'time_mi
n': new Date().getMinutes()})
Inserted 1 record(s) in 31ms
> db.c.find({})
{ "_id" : ObjectId("50d30884059dc377c6ff66ec"), "date" : ISODate("2012-12-20T12:
45:56.493Z"), "time_hours" : 16, "time_min" : 45 }
Fetched 1 record(s) in 0ms
>
使用Mongo shell。这意味着你可以在任何mongo驱动程序中使用它。
答案 2 :(得分:1)
请记住 - 这不是学习辅导的地方,这是人们遇到与他们的学习能力无关的技术或软件问题的地方。为了改进这一点,请阅读使用mongodb和整体使用node.js的示例。
以下是您的情况的一些细节,以指导您:
在myPort.on('data')的回调函数中,您可以访问您的数据,这是您必须将数据保存到数据库的确切位置。
同时,在初始化数据库连接和集合时,需要获取集合的句柄,以便在之后的应用程序中使用它。 在db.collection('tempsensor')上的回调函数中,您有对象集合 - 这是执行mongodb函数以处理该集合中的数据所需的。
因此,将此变量保存在共享范围内的某个位置(可以是全局变量或集合数组)。
然后在收到数据的回调中,使用此集合并传递Serdar Dogruyol建议的数据。