本节为您介绍如何在UQL语句中使用Connection
对象的uql()
方法和uqlStream()
方法查询数据库。
每个示例主要展示如何使用所列方法。点击完整示例.
UQL是全面操作嬴图数据库的专用语言。更多UQL的详细信息,请参阅本文档.
Uql()
在当前图集或数据库上执行UQL查询语句并返回查询结果。
参数:
string
:待执行的UQL查询语句。RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
Response
:请求的结果。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 获取图集miniCircle中@movie下的5个点并打印其信息
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "miniCircle",
}
query, _ := conn.Uql("find().nodes({@movie}) as n return n{*} limit 5", requestConfig)
nodeList, schemaList, _ := query.Alias("n").AsNodes()
printers.PrintNodes(nodeList, schemaList)
+-----+------+--------+--------------------------+------------------------+------+--------+
| ID | UUID | Schema | name | genre | year | rating |
+-----+------+--------+--------------------------+------------------------+------+--------+
| m_1 | 1001 | movie | The Shawshank Redemption | crime drama | 1994 | 9.7 |
| m_2 | 1002 | movie | Farewell My Concubine | drama romance LGBT | 1993 | 9.6 |
| m_3 | 1003 | movie | Forrest Gump | drama romance | 1994 | 9.5 |
| m_4 | 1004 | movie | Léon | drama action crime | 1994 | 9.4 |
| m_5 | 1005 | movie | Titanic | drama romance disaster | 1997 | 9.4 |
+-----+------+--------+--------------------------+------------------------+------+--------+
更多示例,请参阅嬴图数据与Go类型映射.
UQLStream()
在当前图集或数据库上执行UQL查询语句并以增量形式返回查询结果。在处理大型数据集时,无需立刻加载所有数据至内存中。
参数:
string
:待执行的UQL查询语句。RequestConfig
(可选):请求的配置。如果填入nil
,函数将使用默认的配置。
返回值:
UQLResponseStream
:请求的结果。error
:包含发生问题详细信息的错误对象。如果操作成功,则返回nil
。
// 获取图集miniCircle的1步路径
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "miniCircle",
}
stream, err := conn.UQLStream("n().e().n() as paths return paths{*}", requestConfig)
if err != nil {
println(err)
}
count := 0
for true {
resp, err := stream.Recv(true)
if err != nil {
println("End")
}
if resp != nil {
printers.PrintStatistics(resp.Statistic)
paths, err := resp.Get(0).AsPaths()
if err != nil {
println(err)
}
count += len(paths)
println("Count = ", count)
} else {
break
}
}
stream.Close()
Total Cost : 0.029s | Engine Cost : 0.001s
Count = 1250
Total Cost : 0.029s | Engine Cost : 0.001s
Count = 1390
End
完整示例
package main
import (
"github.com/ultipa/ultipa-go-sdk/sdk"
"github.com/ultipa/ultipa-go-sdk/sdk/configuration"
"github.com/ultipa/ultipa-go-sdk/utils"
)
func main() {
// 设置连接
//URI 示例: hosts="mqj4zouys.us-east-1.cloud.ultipa.com:60010"
config, _ := configuration.NewUltipaConfig(&configuration.UltipaConfig{
Hosts: []string{"192.168.1.85:60061", "192.168.1.86:60061", "192.168.1.87:60061"},
Username: "***",
Password: "***",
})
// 建立与数据库的连接
conn, _ := sdk.NewUltipa(config)
// 配置请求
requestConfig := &configuration.RequestConfig{
UseMaster: true,
GraphName: "miniCircle",
}
// 获取10个点并打印返回的第一个点的_id和name属性值
query, _ := conn.Uql("find().nodes({@movie}) as n return n{*} limit 10", requestConfig)
nodeList, _, _ := query.Alias("n").AsNodes()
println(utils.JSONString(nodeList[0].GetID()))
println(utils.JSONString(nodeList[0].Values.Get("name")))
}