我使用try.zorba.io 我的代码(简化)是:
jsoniq version "1.0";
let $tweets :=
[
{
"id" : 1,
"user" : {
"id" : 1111,
"screen_name" : "Bobby"
}
},
{
"id" : 2,
"user" : {
"id" : 1111,
"screen_name" : "Bobby"
}
},
{
"id" : 3,
"user" : {
"id" : 2222,
"screen_name" : "Greg"
}
},
{
"id" : 4,
"user" : {
"id" : 3333,
"screen_name" : "Tom"
}
}
]
let $users :=
[
{
"screen_name" : "Julie",
"id" : 4444
}, {
"screen_name" : "Tom",
"id" : 3333
}, {
"screen_name" : "Greg",
"id" : 2222
}, {
"screen_name" : "Barb",
"id" : 5555
}, {
"screen_name" : "Bobby",
"id" : 1111
}, {
"screen_name" : "Yall",
"id" : 6666
}
]
我想找出所有"screen_name"
$users
没有任何$tweets
的{{1}}。我想我必须以某种方式使用empty(s)
函数,但我不知道如何。到目前为止,这是我的努力(但它不起作用,我的结果是空的):
for $t in members($tweets)
for $u in members($users)
for $r in members($users)
where $u."id" eq $t."user"."id"
where empty($r)
return $u."screen_name"
有什么建议吗?
答案 0 :(得分:0)
您需要一个嵌套循环来为每个用户计算推文并将其与变量绑定。一旦这些推文存储在变量中,您就可以使用empty
函数进行过滤,就像这样(在try.zorba.io上测试):
...
for $u in members($users)
let $tweets :=
for $t in members($tweets)
where $u."id" eq $t."user"."id"
return $t
where empty($tweets)
return $u."screen_name"
请注意,try.zorba.io
当前正在Zorba 2.9上运行,这是一个旧版本。稳定,成熟的JSONiq版本附带最新的Zorba 3.0,您可以下载。
使用Zorba 3.0,可以像这样改进查询:
...
let $tweeting-user-ids := distinct-values($tweets[].user.id)
for $user in $users[]
where not $user.id = $tweeting-user-ids
return $user.screen_name