例如,假设您的数据库包含一堆People{ name }
对象,并且您想查找名称以字母“H”或“Mi”开头的每个人。
问问题
41 次
1 回答
0
您应该使用正则表达式https://docs.dgraph.io/query-language/#regular-expressions 但是,正则表达式至少接受 3 个字符。
您可以做的其他方法是使用“has”功能并按谓词排序。 https://docs.dgraph.io/query-language/#has
{
me(func: has(name), first: 50, orderasc: name) {
name
}
}
但是使用“拥有”功能,您无法完全控制。它将按照字母顺序。
获得这种控制级别的一种方法是创建一个伪索引结构。每次添加用户时,都会将他与将扮演索引角色的树相关联。通过这棵树,您可以计算和遍历边缘。
例如:
假设您知道树的 UID(或者您使用 Upser Block)。
_:NewUser <name> "Lucas" .
_:NewUser <pred1> "some1" .
_:NewUser <pred2> "some2" .
# Now we gonna relate Lucas to our tree and <0x33f> is the uid for the letter L of "Lucas"
<0x33f> <firstCharacter> _:NewUser . #This is a reverse record (you don't need to use @reverse tho)
使用 Upsert 块的相同示例:
upsert {
query {
v as var(func: type(myTree)) @filter(eq(letter, "L"))
}
mutation {
set {
_:NewUser <name> "Lucas" .
_:NewUser <pred1> "some1" .
_:NewUser <pred2> "some2" .
uid(v) <firstCharacter> _:NewUser .
}
}
}
树中的基本搜索如下:
{
q(func: type(myTree)) @filter(eq(letter, "L")) {
letter
firstCharacter { name pred1 pred2 }
}
}
或者
{
q(func: type(myTree)) @filter(eq(letter, "L")) {
letter
count(firstCharacter)
}
}
干杯。
于 2019-12-31T21:04:27.883 回答