问题描述
定义
我已将我的多维数据集js后端连接到mongodb。我通过以下方式将文档存储在mongo db数据库中。
这是我的文档在MONGO DB中的样子
{
anonymousId: "bdee014b-09e1-4d79-bcf1-c3cc91cd4101"
user: "abc"
url: "/index"
eventType: "pageView"
date: "22-08-2020"
time: "20:33:9"
data: "some data"
}
现在让我们假设我的mongodb集合中有 10个文档,其中5个文档属于用户:“ abc” ,而5个文档属于用户:“ xyz” 。
下面如何在浏览器控制台中立即显示数据
{
annotation: {measures: {,…},…}
data: [{Events.user: "xyz",{Events.user: "xyz",…]
0: {Events.user: "xyz",…}
1: {Events.user: "xyz",…}
2: {Events.user: "xyz",…}
3: {Events.user: "abc",…}
4: {Events.user: "abc",…}
5: {Events.user: "xyz",…}
lastRefreshTime: "2020-08-22T15:23:53.547Z"
query: {measures: ["Events.pageView","Events.buttonClick"],dimensions: ["Events.user","Events.allData"],…}
refreshKeyValues: [[{unix_timestamp(): 1598109833}]]
usedPreAggregations: {}
}
在这里您可以看到数据数组,我从多维数据集js后端得到的响应中得到了回复,其中 4 中有6个对象属于用户 XYZ 和 2 属于 ABC 。
我的CUBE.JS SCHEMA
cube(`Events`,{
sql: `SELECT * FROM test.events`,refreshKey: {
sql: `SELECT UNIX_TIMESTAMP()`
},measures: {
count: {
type: `count`
},pageView: {
type: `count`,filters: [
{ sql: `${eventType} = 'pageView'` }
]
},buttonClick: {
type: `count`,filters: [
{ sql: `${eventType} = 'buttonClicked'` }
]
}
},dimensions: {
anonymousId: {
sql: `anonymousId`,type: `string`
},url: {
sql: `url`,user: {
sql: `user`,allData: {
sql: `data`,eventType: {
sql: `eventType`,referrer: {
sql: `referrer`,}
});
问题
我如何隔离,或者我们可以说组数据,具体取决于用户。我的意思是我希望数据为两个不同的用户返回两个数组。假设 xyz 有2个文档,则应返回该用户的2个文档的数组,而 abc 有4个文档,则应返回4个文档的数组。
不应将它们一起返回。 abc的数据应单独返回, xyz的数据应单独返回。
2个用户应保留2个不同的数组
期望
为实现此行为而编写模式的技巧或方式
解决方法
您可以使用User Context或queryTransformer或Multitenant Compile Context,这三个功能使您可以基于授权数据实现数据访问。
queryTransformer稍微复杂一点,但是它使您可以更灵活地自定义访问控制。更适合复杂情况。