通过 MongoDB by Compose 在 Intel® Edison 主板上启用 IBM Bluemix
本文介绍如何使用 Node.js API 与 IBM Bluemix 云服务建立连接。
获取新的 Intel® IoT Developer Kit,这是一个完整的硬件和软件解决方案,使开发人员能够使用 Intel® Galileo 和 Intel® Edison 开发板创建令人兴奋的新解决方案。访问 Intel® 物联网开发者专区。
本文介绍如何使用 Node.js* API 与 IBM* Bluemix* 云服务建立连接。 这包括创建 Bluemix 应用程序,添加 mongoDB* 连接,以及存储和检索数据。
创建 Bluemix 应用程序
- 登录到 Bluemix 控制台,选择 DASHBOARD(仪表板),然后单击 CREATE APP(创建应用程序)。
- 单击 WEB(网络),然后选择 SDK for Node.js(Node.js SDK)。单击 CONTINUE(继续)。
- 为应用程序命名,然后单击 FINISH(完成)。
- 在顶部,您可以看到状态“Your app is staging(您的应用程序正在暂存)”。
- 暂存完成后,单击左侧面板上的 overview(概述) 以查看仪表板。
- 现在,从应用程序仪表板单击 ADD A SERVICE OR API(添加服务或 API)。
- 在服务页面中,单击 Data and Analytics(数据和分析) 部分中的 MongoDB by Compose 服务。
- 在右侧,您可以看到输入 Username(用户名)、Password(密码)、Host(主机) 和 Port(端口) 的选项。
- 如果您没有 Compose 帐户,则可能需要创建一个。单击 Register at Compose(在 Compose 注册)。
- 注册后,登录到 Compose.io 并创建一个 MongoDB 部署。
- 使用默认值,单击 Create Deployment(创建部署)。
创建部署需要几分钟时间;您可以看到如下所示的状态。
部署完成后,您将被重定向到入门页面,您可以在其中创建数据库。
- 通过单击右上角的 Add Database(添加数据库) 创建数据库。为数据库命名,然后单击 Run(运行)。
- 为数据库添加用户,以便使用连接字符串访问数据库。
- 单击 Admin Settings(管理设置) 以获取主机名和端口详细信息。
- 在 Bluemix 添加服务页面上,输入 hostname(主机名)、port(端口)、username(用户名) 和 password(密码) 的详细信息。
- 单击创建后,单击出现的弹出窗口上的 RESTAGE(重新暂存)。
重新暂存完成后,您应该在右上角看到一条状态,显示“Your app is running(您的应用程序正在运行)”。
设置开发环境
将 mongodb npm 模块安装到您的项目中。
npm install mongodb
设置 mongodb 连接
为该模块创建一个节点引用变量和客户端对象,以建立数据库连接。
var mongodb = require('mongodb'); var MongoClient = mongodb.MongoClient
创建 mongodb 连接
connect 函数返回一个 db 对象,其中包含 collection 对象。 collection 对象用于从云中插入和检索数据。
可以从 Bluemix 控制台获取连接 URL。 从应用程序仪表板中选择 MongoDB by Compose 服务,然后单击 Show Credentials(显示凭据)。
您可以使用这些凭据创建连接 URI。 形成如下所示的 uri,以便在 node 应用程序中使用
mongodb://<user>:<password>@<uri>:<port>/iot-compose?ssl=true
示例
var uri = mongodb://iot-kona:intel123@aws-us-east-1-portal.11.dblayer.com:27832/iot-compose?ssl=true
复制凭据下的 uri 并将其传递给 connect 函数
db = MongoClient.connect(uri, function(err, db) {});
存储数据
数据可以存储为 JSON 对象或 JSON 对象数组。
data = {‘sensor-id’ : ‘sens341’, ‘value’ : 65.5} db = MongoClient.connect(config.url, function(err, db) { collection = db.collection(config.db); collection.insert(data, function(err, result) {}); });
查询数据
基于时间戳的查询
dataQuery = { "timestamp": { $gt: readQuery.timestamp } };
基于 Sensorid 的查询
dataQuery = { "sensor_id": { $eq: readQuery.sensor_id } } Run query collection = db.collection(self.config.db); collection.find(dataQuery).toArray( function(err, items) { if(!err) console.log(JSON.stringify(items, null, ' ')); });