我正在尝试使用带有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连接器实现它?
谢谢!
答案 0 :(得分:1)
如果您的文件如下所示:
{
"name": "Star Wars",
"year": 1978,
"rating": "*****"
}
您可以创建一个MapReduce视图,该视图以doc.rating
为键,并使用内置_count
缩减器:
function(doc) {
emit(doc.rating,null);
}
当您使用group=true
查询此视图时,rating
的不同值将显示在数据集中的出现次数。