【问题标题】:Is ArangoDB edge document right place to put additional key-value?ArangoDB 边缘文档是放置附加键值的正确位置吗?
【发布时间】:2015-06-22 21:08:17
【问题描述】:

在 MySql 中,我们使用两个模型用户和友谊创建简单的用户友谊数据库。

模型友谊包含密钥:

  • 身份证
  • 来自(参考键)
  • 到(参考键)
  • 已创建
  • 修改
  • 已批准 (0,1)
  • 块 (0,1)

在 ArangoDB 中进行相同操作的正确方法是什么, 可以有一个带有附加键值的“友谊”边缘文档吗? 是否可以执行更新边缘文档? 另外,这些值是否可能在执行请求后显示?

【问题讨论】:

    标签: arangodb


    【解决方案1】:

    举个例子。

    首先创建一个“users”集合和一个“friendship”集合。

    arangosh [_system]> db._create("users");
    [ArangoCollection 33746098, "users" (type document, status loaded)]
    
    arangosh [_system]> db._createEdgeCollection("friendship");
    [ArangoCollection 33877170, "friendship" (type edge, status loaded)]
    

    创建两个用户

    arangosh [_system]> db.users.save({_key: "you"});
    { 
      "_id" : "users/you", 
      "_rev" : "34598066", 
      "_key" : "you" 
    }
    
    arangosh [_system]> db.users.save({_key: "me"});
    { 
      "_id" : "users/me", 
      "_rev" : "34794674", 
      "_key" : "me" 
    }
    

    以及它们之间的关系

    arangosh [_system]> db.friendship.save("users/me", "users/you", {});
    { 
      "_id" : "friendship/35515570", 
      "_rev" : "35515570", 
      "_key" : "35515570" 
    }
    

    检查用户

    arangosh [_system]> db._query("FOR u IN users RETURN u").toArray()
    [ 
      { 
        "_id" : "users/me", 
        "_rev" : "34794674", 
        "_key" : "me" 
      }, 
      { 
        "_id" : "users/you", 
        "_rev" : "34598066", 
        "_key" : "you" 
      } 
    ]
    

    和他们的邻居

    arangosh [_system]> db._query("FOR u IN users RETURN { user: u, friends: NEIGHBORS(users, friendship, u, 'outbound') }").toArray()
    [ 
      { 
        "user" : { 
          "_id" : "users/me", 
          "_key" : "me", 
          "_rev" : "34794674" 
        }, 
        "friends" : [ 
          "users/you" 
        ] 
      }, 
      { 
        "user" : { 
          "_id" : "users/you", 
          "_key" : "you", 
          "_rev" : "34598066" 
        }, 
        "friends" : [ ] 
      } 
    ]
    

    添加“块”

    arangosh [_system]> db._query("FOR f IN friendship FILTER f._from == 'users/me' and f._to == 'users/you' UPDATE f WITH { block: true } IN friendship RETURN { before: OLD, after: NEW }").toArray()
    [ 
      { 
        "before" : { 
          "_id" : "friendship/35515570", 
          "_rev" : "35515570", 
          "_key" : "35515570", 
          "_from" : "users/me", 
          "_to" : "users/you" 
        }, 
        "after" : { 
          "block" : true, 
          "_id" : "friendship/35515570", 
          "_rev" : "63892658", 
          "_key" : "35515570", 
          "_from" : "users/me", 
          "_to" : "users/you" 
        } 
      } 
    ]
    

    return 将返回整个文档。也可以只返回block属性

    arangosh [_system]> db._query("FOR f IN friendship FILTER f._from == 'users/me' and f._to == 'users/you' UPDATE f WITH { block: false } IN friendship RETURN { before: OLD.block, after: NEW.block }").toArray()
    [ 
      { 
        "before" : true, 
        "after" : false 
      } 
    ]
    

    【讨论】:

    • 感谢您的精彩解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多