我正在使用node.js和ibm bluemix来运行后端应用程序。我正在使用cloudant模块。但是在我搜索的github中,我只发现了如何使用1个结果进行查询。所以我想问你们,我怎么能用多个结果进行查询。我想在我的app.js中创建它。我的示例数据库是
{
"userid":"chris"
"time":"12.20",
"power":"200",
}
{
"userid":"chris"
"time":"12.30",
"power":"250",
}
并且将有大量具有相同用户ID和不同时间和功率的数据。我如何进行查询并使用mqtt发布?
谢谢你的帮助。
答案 0 :(得分:2)
在这里获取示例nodejs和cloudant:
git clone https://github.com/IBM-Bluemix/get-started-node
您将在cloudant db结果对象上找到一个循环:
mydb.list({ include_docs: true }, function(err, body) {
if (!err) {
body.rows.forEach(function(row) {
if(row.doc.name)
names.push(row.doc.name);
});
response.json(names);
}
});
});
接下来在watson iot平台服务中,我找到了nodejs的客户端库。 Samples here
我认为(对我而言)从node-red starter样板应用程序开始会更容易。
将3个元素存储在doc:
中 mydb.insert({ "userid" : "chris","time":"12:20","power":"200" }, function(err, body, header) {
if (err) {
return console.log('[mydb.insert] ', err.message);
}
response.send("added to the database.");
});
得到他们:
mydb.list({ include_docs: true }, function(err, body) {
if (!err) {
body.rows.forEach(function(row) {
if(row.doc.userid)
response.send(row.doc.userid+" "+row.doc.power+" "+row.doc.time);
});
}
});
答案 1 :(得分:0)
您可能希望为cloudant数据库创建一个视图,然后查询该视图。这将使用视图中的地图和可能的reduce功能。因此,例如,如果要查找与单个用户标识相关的所有记录,可以创建如下视图:
{
"_id": "_design/views",
"views": {
"byUser": {
"map": "function (doc) { if (doc.userid) {emit(doc.userid, doc); } }"
}
}
}
这是处理映射过程的一种稍微懒惰的方式,因为它在视图中创建了包含所有文档内容的视图。这样,当返回查询结果时,结果集包括完整记录,而不仅仅是_id和userid字段。这减少了cloudant数据库上的事务负载,但增加了实际数据库的大小。