在Keen.io中嵌套JSON对象

Nested JSON Objects in Keen.io

本文关键字:JSON 对象 嵌套 Keen io      更新时间:2023-09-26

在Keen的集合中。io中,我有一个类型为list的属性pourspours是单个pour对象的列表,包含属性start_time_of_pourend_time_of_pourpour_amount。但是,我不能直接查询工作台中存储在此列表中的数据。工作台只允许我将Target属性设置为pour列表,而不允许设置单个的pour对象或属性。

是否有一种方法可以访问这些嵌套的对象和工作台中的属性?谢谢!

我是Keen IO的Josh。

目前没有一种方法可以通过工作台或API查询列表中包含的对象的属性。然而,有一些方法可以解决这个问题。

索引属性

您可以在发送事件之前将对象列表中的属性复制到一组索引属性中。这就产生了像pour_1_amountpour_2_amountpour_n_amount这样的属性。

如果你这样做,你应该添加一个number_of_pours属性来表示pours列表的大小。当您准备好进行分析时,首先查询以获得事件范围内的最大number_of_pours。这将是一个循环的输入,您将运行它来分析每个索引属性。

假设你想找出所有倒出来的水的总量。下面是如何使用Ruby和keen-gem实现这一点,尽管这个概念适用于一般情况。

# within an irb session
require 'keen'   
# get the maximum number of pours to check
maximum_pours_length = 
  Keen.maximum('collection', target_property: 'number_of_pours')
# total pour amount
total_pour_amount = 0
for n in maximum_pours_length
  total_pour_amount = total_pour_amount + 
    Keen.sum('collection', target_property: "pour_#{n}_amount")
end
# print the total
puts total_pour_amount

total_pour_amount将包含每个事件的每个列表项的所有倾注金额的总和。

Pre-aggregate属性

你可以聚合(也就是减少)属性的所有实例到一个:例如total_pour_amount, maximum_pour_end_time,等等。这需要你事先知道你想做什么分析,但是你可以使用Keen进行所有的查询。

提取/客户端处理

您可以执行提取,并在您这边进行手动处理。为了使提取更快,您可以将其限制为某些属性。这个选项使数据模型保持最干净,但是在查询时需要做更多的工作,因为Keen不会进行聚合。像Miso Dataset这样的项目可以使这些工作变得更容易。

使用ruby gem,您现在似乎可以运行如下命令来查询嵌套属性:

Keen.select_unique(
    'sessions',
    target_property: 'user.id',
    :timeframe => 'this_8_weeks'
)