MongoDB 数组 属性 in cube.js 中元素个数的计数度量设计
Design a counting measure of the element number in a MongoDB array property in cube.js
我正在使用 cube.js with MongoDB through MongoDB Connector for BI and MongoBI Driver,到目前为止一切顺利。我想要一个 cube.js 数值 measure 来计算 MongoDB 对象嵌套数组 属性 中的元素长度。类似于:
{
"nested": {
"arrayPropertyName": [
{
"name": "Leatha Bauch",
"email": "Leatha.Bauch76@hotmail.com"
},
{
"name": "Pedro Hermiston",
"email": "Pedro76@hotmail.com"
}
]
}
}
我无法通过查看文档来解决这个问题,我想知道这是否可能。
我试过 type: count
:
MyNestedArrayPropertyCounter: {
sql: `${CUBE}.\`nested.arrayPropertyName\``,
type: `count`,
format: `number`,
},
但我得到了
Error: Error: Unknown column 'nested.arrayPropertyName' in 'field list'
任何 help/advice 真的很感激。谢谢
BI 将嵌套数组视为单独的关系 table。参见 https://www.mongodb.com/blog/post/introducing-the-mongodb-connector-for-bi-20
这就是您收到未知列错误的原因,它不是父文档的一部分 table。
所以我猜你必须在嵌套数组上构建架构,然后在父对象 ID 上构建带有维度的度量计数。
希望它停止。
我听从了 Michael Parshin's 的建议,下面是我解决问题的发现和结果:
LEFT JOIN
接近 cube.js joins。我发现它非常慢,而且大多数时候它会以超时结束,即使是通过命令行 SQL 客户端执行查询;
启动 mongosqld with --prejoin flag. That was a better option since mongosqld
automatically adds master table columns/properties to the secondary tables thus enabling you to conveniently query cube.js measures without joining a secondary Cube;
写了一个 mongo 脚本,fetch/iterate/precalc 并在单独的 属性 集合文档中坚持 nested.arrayPropertyName
计数。
结论
不考虑选项 1,选项 3 明显优于选项 2,通常不到 1 秒,而在我的本地计算机上则超过 20 秒。我比较了具有相同 measure, different timeDimension 范围和粒度的两个选项。
我很可能会将数组计数预计算合并到 mongo 文档后端持久化逻辑中。
我正在使用 cube.js with MongoDB through MongoDB Connector for BI and MongoBI Driver,到目前为止一切顺利。我想要一个 cube.js 数值 measure 来计算 MongoDB 对象嵌套数组 属性 中的元素长度。类似于:
{
"nested": {
"arrayPropertyName": [
{
"name": "Leatha Bauch",
"email": "Leatha.Bauch76@hotmail.com"
},
{
"name": "Pedro Hermiston",
"email": "Pedro76@hotmail.com"
}
]
}
}
我无法通过查看文档来解决这个问题,我想知道这是否可能。
我试过 type: count
:
MyNestedArrayPropertyCounter: {
sql: `${CUBE}.\`nested.arrayPropertyName\``,
type: `count`,
format: `number`,
},
但我得到了
Error: Error: Unknown column 'nested.arrayPropertyName' in 'field list'
任何 help/advice 真的很感激。谢谢
BI 将嵌套数组视为单独的关系 table。参见 https://www.mongodb.com/blog/post/introducing-the-mongodb-connector-for-bi-20
这就是您收到未知列错误的原因,它不是父文档的一部分 table。
所以我猜你必须在嵌套数组上构建架构,然后在父对象 ID 上构建带有维度的度量计数。
希望它停止。
我听从了 Michael Parshin's 的建议,下面是我解决问题的发现和结果:
LEFT JOIN
接近 cube.js joins。我发现它非常慢,而且大多数时候它会以超时结束,即使是通过命令行 SQL 客户端执行查询;启动 mongosqld with --prejoin flag. That was a better option since
mongosqld
automatically adds master table columns/properties to the secondary tables thus enabling you to conveniently query cube.js measures without joining a secondary Cube;写了一个 mongo 脚本,fetch/iterate/precalc 并在单独的 属性 集合文档中坚持
nested.arrayPropertyName
计数。
结论
不考虑选项 1,选项 3 明显优于选项 2,通常不到 1 秒,而在我的本地计算机上则超过 20 秒。我比较了具有相同 measure, different timeDimension 范围和粒度的两个选项。
我很可能会将数组计数预计算合并到 mongo 文档后端持久化逻辑中。