1

我正在尝试使用带有 Cloudant 连接器的 Loopback 为查询获取不同的值,但我在文档中没有找到任何关于此的内容。

例如,我需要一个查询来打开它:

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

进入这个:

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

我正在使用 REST API 来查询我的 Products 模型(上面是仅评级字段的过滤视图)。如果有某种过滤器可以在不修改我在文档中以某种方式错过的服务器的情况下使用,那将是最佳选择。

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

/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 连接器来实​​现它?

谢谢!

4

1 回答 1

1

如果您的文件如下所示:

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

您可以创建一个 MapReduce 视图,它作为键发出doc.rating并使用内置的_countreducer:

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

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

于 2016-06-14T06:28:58.163 回答