dgraph 基本查询语法 二

这部分主要是mutation 操作,(就是增加、删除操作)

参考git 项目 https://github.com/rongfengliang/dgraph-docker-compose-deploy

schema 操作

包含以下操作:

  • 添加schema
  • 修改schema(添加索引)
参考操作
industry: string @index(term) .
boss_of: uid .

添加数据

  • 说明
    dgraph 会给每个导入的数据添加一个内部id,同时也可以使用json 格式
参考格式:
{
  set {
    _:company1 <name> "CompanyABC" .
    _:company2 <name> "The other company" .

    _:company1 <industry> "Machinery" .

    _:company2 <industry> "High Tech" .

    _:jack <works_for> _:company1 .
    _:ivy <works_for> _:company1 .
    _:zoe <works_for> _:company1 .

    _:jose <works_for> _:company2 .
    _:alexei <works_for> _:company2 .

    _:ivy <boss_of> _:jack .

    _:alexei <boss_of> _:jose .
  }
}
json  格式:
{
        "set": [
            {
                "uid": "_:company1",
                "industry": "Machinery",
                "name": "CompanyABC"
            },
            {
                "uid": "_:company2",
                "industry": "High Tech",
                "name": "The other company"
            },
            {
                "uid": "_:jack",
                "works_for": { "uid": "_:company1"},
                "name": "Jack"
            },
            {
                "uid": "_:ivy",
                "works_for": { "uid": "_:company1"},
                "boss_of": { "uid": "_:jack"},
                "name": "Ivy"
            },
            {
                "uid": "_:zoe",
                "works_for": { "uid": "_:company1"},
                "name": "Zoe"
            },
            {
                "uid": "_:jose",
                "works_for": { "uid": "_:company2"},
                "name": "Jose"
            },
            {
                "uid": "_:alexei",
                "works_for": { "uid": "_:company2"},
                "boss_of": { "uid": "_:jose"},
                "name": "Alexei"
            }
        ]
    }

  • 外部id 说明
    dgraph 当前不支持外部id,可选的方式是将唯一标示做为数据的边(edge)

语言支持

可以使用语言标签进行不同语言的区分,格式 @lang ,支持使用json 格式

  • 参考格式
_:myID <an_edge> "something"@en .
_:myID <an_edge> "某物"@zh-Hans .
json 格式
{
        "set": [
            {
                "uid": "_:myID",
                "an_edge@en": "something",
                "an_edge@zh-Hans": "某物"
            }
        ]
}

反向边

边是有方向的,查询不能进行反向转换,有两种方式可以进行双向查询

  • 给schema 添加反向边,同时添加给所有数据
  • 使用@reverse 关键字告诉dgraph 一直存储反向边
  • 参考格式
boss_of: uid @reverse .

删除数据

包含三种方式删除数据

  • /"value" . 删除单个三元组
  • * . 删除指定边的所有三元组
  • * * . 删除指定节点的三元组
json 格式
删除节点关联数据:
{
        "delete": [
            {
                "uid": "0xa"
            }
        ]
}
删除边的三原则(不删除子节点数据):
 {
        "delete": [
            {
                "uid": "0xa",
                "friends": null
            }
        ]
}
删除关系以及子节点数据
 {
        "delete": [
            {
                "uid": "0x2", # Answer UID.
                "comment": {
                   "uid": "0x3" # Comment.
            }
            },
            {
                "uid": "0x3" #Comment final delation, cleaning the Answer's child.
            }
        ]
}

Predicate 查询

查询节点外部边的名称

参考格式:
{
  company(func: allofterms(name, "CompanyABC")) {
    _predicate_
  }
}

expand Predicate

查询所有Predicate,类似列出所有数据

参考格式:
{
  expand(func: allofterms(name, "Michael")) {
    expand(_all_) {
      expand(_all_) {
        expand(_all_)
      }
    }
  }
}

参考资料

https://github.com/rongfengliang/dgraph-docker-compose-deploy
https://tour.dgraph.io/schema/1/

原文地址:https://www.cnblogs.com/rongfengliang/p/9695053.html