所以用这个Person
,Company
例子:
type Person {
name: string
work_for: [Company]
}
type Company {
name: string
work_for: [Person]
}
work_for: [uid] @reverse @count .
name: string @index(fulltext, term) @count .
要查找的查询将All the companies that had any of "John James Sam" with total count of those names per company
构造什么?我试过:
q(func: anyofterms(hashed, "Jame John Sam")){
uid
@groupby work_for{
name
count(uid)
}
}
}```
but that gives the person and the companies they worked for plus the count which is not the company and the number of people with those names that worked for it. Thanks in advance
检查这是否适合您。(让我们使用我的示例来了解这一点(
{
var(func: anyofterms(name, "Alexei Jack Jose Zoe Ivy")) @groupby(works_for) {
a as count(uid)
}
q(func: uid(a), orderdesc: val(a)) {
name
total_workers : val(a)
workHere: ~works_for @groupby(name){
count(uid)
}
}
}
结果
此查询并不完美,因为它利用了 GroupBy 中未实现的功能。但是,您可以使用此功能或期望 GroupBy 函数得到改进。
{
"data": {
"q": [
{
"name": "CompanyABC",
"total_workers": 6,
"workHere": [
{
"@groupby": [
{
"name": "Ivy",
"count": 2
},
{
"name": "Jack",
"count": 2
},
{
"name": "Zoe",
"count": 2
}
]
}
]
},
{
"name": "The other company",
"total_workers": 4,
"workHere": [
{
"@groupby": [
{
"name": "Alexei",
"count": 2
},
{
"name": "Jose",
"count": 2
}
]
}
]
}
]
}
}
使用此数据集作为参考:https://tour.dgraph.io/master/schema/2/
我已经编辑了它,它看起来像这样:
{
set {
_:company1 <name> "CompanyABC" .
_:company1 <dgraph.type> "Company" .
_:company2 <name> "The other company" .
_:company2 <dgraph.type> "Company" .
_:company1 <industry> "Machinery" .
_:company2 <industry> "High Tech" .
_:jack <works_for> _:company1 .
_:jack <dgraph.type> "Person" .
_:ivy <works_for> _:company1 .
_:ivy <dgraph.type> "Person" .
_:zoe <works_for> _:company1 .
_:zoe <dgraph.type> "Person" .
_:jack <name> "Jack" .
_:ivy <name> "Ivy" .
_:zoe <name> "Zoe" .
_:jose <name> "Jose" .
_:alexei <name> "Alexei" .
#duplicated
_:jack2 <name> "Jack" .
_:jack2 <works_for> _:company1 .
_:jack2 <dgraph.type> "Person" .
_:ivy2 <name> "Ivy" .
_:ivy2 <works_for> _:company1 .
_:ivy2 <dgraph.type> "Person" .
_:zoe2 <name> "Zoe" .
_:zoe2 <works_for> _:company1 .
_:zoe2 <dgraph.type> "Person" .
_:jose2 <name> "Jose" .
_:jose2 <works_for> _:company2 .
_:jose2 <dgraph.type> "Person" .
_:alexei2 <name> "Alexei" .
_:alexei2 <works_for> _:company2 .
_:alexei2 <dgraph.type> "Person" .
#duplicated end
_:jose <works_for> _:company2 .
_:jose <dgraph.type> "Person" .
_:alexei <works_for> _:company2 .
_:alexei <dgraph.type> "Person" .
_:ivy <boss_of> _:jack .
_:alexei <boss_of> _:jose .
}
}