Node.js中的Cloudant,如何使用多个结果进行查询

时间:2017-03-31 08:08:20

标签: javascript node.js ibm-cloud cloudant nosql

我正在使用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发布? 谢谢你的帮助。

2 个答案:

答案 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数据库上的事务负载,但增加了实际数据库的大小。