我正在构建一个聊天室引擎,我有一个这样的图表:
operator <<
我想获得与特定用户的项目关联的所有项目和roomId。
Dim ws As Worksheet
Dim cell as Range
For Each ws In ActiveWorkbook.Worksheets
For Each cell in ws.UsedRange.Cells
` More stuff here
Next
Next
所以这会抛出正确的'房间'并找到一个由'Julie'开始但它返回Julie的Id,我如何得到这个查询该房间的Id? 这就像我需要做一个'一个回来'并获得@rid ...
我是图表的新手所以任何指针都会受到赞赏。
答案 0 :(得分:2)
这个答案基于我对原始问题的评论中的选项(1),因为您指出here“我想让所有项目不仅仅是那些有julie房间启动的项目”
SELECT *, $rooms_by_user FROM items LET $rooms_by_user = ( SELECT FROM ( SELECT expand(in('Discuss')) FROM $parent.$current ) WHERE in('Started').Name contains 'Julie' )
因此原始查询获取所有项目,并在输出中添加自定义字段(LET子句和$ rooms_by_user字段)。
$ rooms_by_user的内部查询正在扩展每个'Item'的'Discuss'边缘(每个项目运行),从而返回与'Item'关联的所有'Room'顶点。然后,查询的外部部分仅过滤“房间”顶点,仅查找由名为“Julie”的“用户”启动的顶点。
我必须在外部查询中使用contains,in('Started').Name
会返回一个列表,例如["Julie"]
。
通过rid过滤用户可能会更好,然后你只需要过滤'Started'边缘的out属性(即数据库只需要从顶点到边缘'跳'一次,而不是从顶点到边缘到顶点 - 仅当您不使用轻量级边时才会这样,这是当前版本中的默认设置。)。
答案 1 :(得分:1)
假设您的图表具有顶点和边缘类,并且结构类似于:
您可以结合使用select
和图traverse查询来返回所需内容。例如:
select from (traverse both('discuss'), both('started') from #14:0)
where (@class='room')
or (@class='user' and name='Julie')
这将返回以下结果(JSON格式)
{
"result": [
{
"@type": "d",
"@rid": "#13:0",
"@version": 3,
"@class": "room",
"name": "Baking",
"in_started": [
"#15:0"
],
"out_discuss": [
"#16:0"
],
"@fieldTypes": "in_started=g,out_discuss=g"
},
{
"@type": "d",
"@rid": "#12:0",
"@version": 2,
"@class": "user",
"name": "Julie",
"out_started": [
"#15:0"
],
"@fieldTypes": "out_started=g"
}
],
"notification": "Query executed in 0.027 sec. Returned 2 record(s)"
}
<强>更新强>
如果您只想返回房间的@rid,可以使用另一个选择包装上述查询:
select @rid from
(select from (traverse both('discuss'), both('started') from #14:0)
where (@class='room')
or (@class='user' and name='Julie'))
where @class='room'