使用API​​ Connect / StrongLoop中的Loopback与Cloudant Connector进行不同的查询

时间:2016-06-14 06:15:51

标签: ibm-cloud strongloop cloudant loopback apiconnect

我正在尝试使用带有Cloudant Connector的Loopback获取查询的不同值,但我在文档中找不到任何相关内容。

e.g。我需要一个查询来解决这个问题:

[
{
rating: "★★★★★"
},
{
rating: "★★★★★"
},
{
rating: "★★★★★"
},
{
rating: "★★★★★"
},
{
rating: "★★★☆☆"
},
{
rating: "★★★☆☆"
}
]

进入这个:

[
{
rating: "★★★★★"
},
{
rating: "★★★☆☆"
}
]

我使用REST API查询我的产品模型(上面是评级字段的过滤视图)。如果我可以使用某种过滤器而不修改我在文档中遗漏的服务器,那将是最好的选择。

有什么方法可以添加一个不同的字段,如:

/Products?filter[fields][rating]=true?distinct=true

或者我该如何解决这个问题?

另外,我已经看到另一个答案,谈论添加一个远程方法来解决这个问题(对于mySQL来说是这样的):

Locations.regions = function (cb) {
  var ds = Locations.app.datasources.myDS;
  var sql = "SELECT DISTINCT region FROM Locations ORDER BY region"; // here you write your sql query.

  ds.connector.execute(sql, [], function (err, regions) {

    if (err) {
      cb(err, null);
    } else {
      cb(null, regions);
    }

  });

};

Locations.remoteMethod(
  'regions', {
    http: {
      path: '/regions',
      verb: 'get'
    },
    returns: {
      root: true,
      type: 'object'
    }
  }
);

如果这样可行,我将如何使用Cloudant NoSQL DB连接器实现它?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您的文件如下所示:

{
  "name": "Star Wars",
  "year": 1978,
  "rating": "*****"
 }

您可以创建一个MapReduce视图,该视图以doc.rating为键,并使用内置_count缩减器:

 function(doc) {
   emit(doc.rating,null);
 }

当您使用group=true查询此视图时,rating的不同值将显示在数据集中的出现次数。