0

私はnode.js、エクスプレス、シリアルポートを使用して作成された小さな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()ますが、時間用の同様の関数はありますか?

助けていただければ幸いです。

よろしくお願いします。

4

3 に答える 3

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
     }
  });
});
于 2012-12-20T12:00:22.250 に答える
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シェルを使用します。これは、どのmongoドライバーでも使用できることを意味します。

于 2012-12-20T12:47:19.690 に答える
1

覚えておいてください-これは学習チュートリアルの場所ではありません。これは、人々が学習能力などに関係のない技術的またはソフトウェアの問題を抱えている場所です。これを改善するために、mongodbでの作業とnode.jsでの全体的な作業の例をお読みください。

ここにあなたを導くためにあなたの状況に関するいくつかの詳細があります:

myPort.on('data')のコールバック関数では、データにアクセスできます。これは、データをデータベースに保存する必要がある正確な場所です。

その間、データベース接続とコレクションを初期化するとき、後でアプリケーションで使用するためにコレクションのハンドルを取得する必要があります。db.collection('tempsensor')のコールバック関数には、オブジェクトコレクションがあります。これは、そのコレクション内のデータを処理するためにmongodb関数を実行するために必要なものです。

したがって、この変数を共有スコープのどこかに保存します(グローバル変数またはコレクションの配列にすることができます)。

次に、受信したデータのコールバックで、このコレクションを使用して、SerdarDogruyolによって提案されたようなデータを渡します。

于 2012-12-20T13:06:21.850 に答える