如何使用JQL检索在Mixpanel的Arb数据库中执行特定事件的用户?

时间:2017-06-28 05:21:05

标签: javascript json nosql

我最近使用Mixpanel的 Javascript查询语言来分析用户行为。我已经为下面提到的问题陈述提出了两种不同的查询变体,但似乎没有一个对我有效。我在下面发布了哪一个。任何人都可以建议我编写查询的正确方法,以获得所需的结果。

问题陈述:查找已执行过活动的用户的所有不同ID:#x; xyz"," abc" &安培; " DFG"

JSON格式的数据库(对于虚拟数据,实际数据库对于相同格式的数据要大得多):

[
    {
        "name": "xyz",
        "distinct_id": "121"
    },

    {
        "name": "abc",
        "distinct_id": "345"
    }
]

查询我写道:

function main() {
    return Events({
        from_date: "2017-06-26",
        to_date: "2017-06-27"
    })
    .groupByUser(function(state, events) {

        var flag_abc = false, flag_xyz = false, flag_dfg = false,  count_unique = 0;

        for (var i = 0; i < events.length - 1; i ++){

            if (count_unique === 3){
                state = true;
                return state;
            }

            if (events[i].name === "abc" && !flag_abc ){
                count_unique += 1;
                flag_abc = true;
            }
            else if(events[i].name === "xyz" && !flag_xyz){
                count_unique += 1;
                flag_xyz = true;
            }
            else if(events[i].name === "dfg" && !flag_dfg){
                count_unique += 1;
                flag_dfg = true;
            }
      }
      state = false;
      return state;
  })
  .filter(function(arr){
     if(arr.value === false)
         return false;
     else
         return true;
  })
}

1 个答案:

答案 0 :(得分:0)

这段代码有局限性

for (var i = 0; i < events.length - 1; i ++){
    if (count_unique === 3){
        state = true;
        return state;
    }
    if (events[i].name === "abc" && !flag_abc ){
        count_unique += 1;
        flag_abc = true;
    }
    else if(events[i].name === "xyz" && !flag_xyz){
        count_unique += 1;
        flag_xyz = true;
    }
    else if(events[i].name === "dfg" && !flag_dfg){
        count_unique += 1;
        flag_dfg = true;
    }
}

您假设您的JSON只有2种不同的类型(xyz,abc)。 如果你有更多独特的名字怎么办?你必须每次都修改你的代码

更好的方法是

有一个全局变量并继续为其添加所有唯一名称。 例如:

var data = ["12", "14", "12", "11"];
console.log(jQuery.unique( data ));

gives : ["12", "14", "11"]

count_unique => will be size of array 
flag_abc  => check if in array abc exist