解析查询-聚合 [英] Parse query - aggregations
问题描述
我的数据库按国家/地区保存用户位置:
My db save user location by country:
- 名称|保证人|纽约
- 名称|保证人|伦敦
- 名称|保证人|法国
- 名称|保证人|纽约
- 名称|保证人|法国
- 名称|保证人|纽约
我正在尝试通过某些查询获取下一个列表:
I'm trying to get the next list by some query:
["NY","London","France"] OR [{"NY":3},{"London":1},{"France":2}]
是否存在与Elasticsearch相同的聚合查询?
Is there any aggregations query same as Elasticsearch?
我只想获取所有用户的国家/地区列表
I want to get only Country list of all my users
推荐答案
已解决
我对原语进行了聚合,适用于所有平台
I made aggregation for primitives, good for all platforms
只需复制粘贴-最多可获得10,000个结果:
just copy paste - good up-to 10,000 results:
云代码:
Cloud Code:
Array.prototype.contains = function(k) {
for(var i=0; i < this.length; i++){
if(this[i] === k){
return true;
}
}
return false;
}
skip = 0;
limit = 1000;
var res = {
time:null,
objects:new Array()
}
var regularList = 0;
var countList = 1;
var tmpArray = new Array();
var start;
Parse.Cloud.define("aggregation", function(request, response) {
start = new Date().getTime();
pagingQuery(request.params.listType,request.params.className,request.params.columnToAggregate,response);
});
function pagingQuery(listType,className,columnToAggregate,response){
var object = Parse.Object.extend(className);
var query = new Parse.Query(object);
query.limit(limit);
query.skip(skip * limit)
query.find({
success: function(results) {
for(var i=0; i<results.length;i++){
switch(listType){
case regularList:
if (!tmpArray.contains(results[i].get(columnToAggregate))) {
tmpArray.push(results[i].get(columnToAggregate));
}
break;
case countList:
var obj = tmpArray.filter(function ( obj ) {
return obj.name === results[i].get(columnToAggregate);
})[0];
if(obj == null){
var agg = {
name:results[i].get(columnToAggregate),
count:1
}
tmpArray.push(agg);
}else{
obj.count++;
}
break;
}
}
if(results.length == limit){
skip++;
pagingQuery(type,className,columnToAggregate,response);
}else{
var end = new Date().getTime();
var t = end - start;
res["time"] = t;
res["objects"] = tmpArray;
response.success(res);
}
},
error: function(error) {
response.error("Error: " + error.code + " " + error.message);
}
});
}
现在您可以轻松进行所需的任何聚合:
now you can easily make any aggregation you want:
0-常规-["NY","London","France"]
1-计数-[{name:"NY",count:3},{name:"London",count:1},{name:"France",count:2}]
就我而言,我使用的是Javascript SDK,但对于所有平台(Android,IOS ...)都是相同的: 您需要提供您的班级名称和列进行汇总:
in my case i'm using Javascript SDK but it is the same for all platforms (Android, IOS ...): you need to supply your Class name & column to aggregate:
客户:
Client:
var regularList = 0;
var countList = 1;
params = {
className: 'YourClass',
columnToAggregate: 'City',
listType: countList
};
Parse.Cloud.run('aggregation', params, {
success: function(result) {
console.log(result);
},
error: function(error) {
console.log(error);
}
});
在任何查询中,您还会获得时间",因此您可以知道查询所花费的时间(以毫秒为单位),就像在ElasticSearch中一样
also you get 'time' in any query, so you can know how many time query takes in milliseconds, as in ElasticSearch
这篇关于解析查询-聚合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!