解析查询-聚合 [英] Parse query - aggregations

查看:112
本文介绍了解析查询-聚合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的数据库按国家/地区保存用户位置:

My db save user location by country:

  1. 名称|保证人|纽约
  2. 名称|保证人|伦敦
  3. 名称|保证人|法国
  4. 名称|保证人|纽约
  5. 名称|保证人|法国
  6. 名称|保证人|纽约

我正在尝试通过某些查询获取下一个列表:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆