Graph 将Rest API回送到图形数据

Graph 将Rest API回送到图形数据,graph,loopbackjs,strongloop,Graph,Loopbackjs,Strongloop,我必须使用strongloop环回创建一个指向有向图模型的RESTAPI。 我有一组节点和一组与节点相关的关系。 关系集合存储nm关系 在models/node.json中,我包含了以下关系 "relations": { "incomingNodes": { "type": "hasMany", "model": "node", "through": "relationship", "foreignKey": "endNode"

我必须使用strongloop环回创建一个指向有向图模型的RESTAPI。 我有一组节点和一组与节点相关的关系。 关系集合存储nm关系

在models/node.json中,我包含了以下关系

  "relations": {
    "incomingNodes": {
      "type": "hasMany",
      "model": "node",
      "through": "relationship",
      "foreignKey": "endNode"
    },
    "outgoingNodes": {
      "type": "hasMany",
      "model": "node",
      "through": "relationship",
      "foreignKey": "startNode"
    }
}
在models/relationships.json中:

  "relations": {
    "startNode": {
      "type": "belongsTo",
      "model": "node",
      "foreignKey": "nodeId"
    },
  "endNode": {
      "type": "belongsTo",
      "model": "node",
       "foreignKey": "nodeId"
    }
  }
"relations": {
  "startNode": {
    "type": "belongsTo",
    "model": "node",
    "foreignKey": "startNodeId"
  },
  "endNode": {
    "type": "belongsTo",
    "model": "node",
    "foreignKey": "endNodeId"
  }
}
浏览器按预期填充,但是如果我使用RESTAPI创建关系

/nodes/{id}/incomingNodes/rel/{fk}
看看数据库,事情变得很奇怪。 写入以下数据:

{
  "id": "55ff1072b88c93a82ae527ea", <--id of the new relationship
  "nodeId": "55fef9a156468fe629d94ac8" <-- id of the {fk}
}
{
“id”:“55ff1072b88c93a82ae527ea”,A需要两件事:

  • foreignKey
    通过
model识别
中的来源(声明关系的模型)
  • key-through
    through
    模型中识别关系的目标
  • A需要在声明关系的模型中使用键来识别目标

    现在,假设以下模式

    Node (id)
    Relationships (id, startNodeId, endNodeId)
    
    您需要在models/node.json关系中添加
    keyThrough

    "relations": {
      "incomingNodes": {
        "type": "hasMany",
        "model": "node",
        "through": "relationship",
        "foreignKey": "endNodeId",
        "keyThrough": "startNodeId"
      },
      "outgoingNodes": {
        "type": "hasMany",
        "model": "node",
        "through": "relationship",
        "foreignKey": "startNodeId",
        "keyThrough": "endNodeId"
      }
    
    并在models/relationships.json中使用
    startNodeId
    endNodeId

      "relations": {
        "startNode": {
          "type": "belongsTo",
          "model": "node",
          "foreignKey": "nodeId"
        },
      "endNode": {
          "type": "belongsTo",
          "model": "node",
           "foreignKey": "nodeId"
        }
      }
    
    "relations": {
      "startNode": {
        "type": "belongsTo",
        "model": "node",
        "foreignKey": "startNodeId"
      },
      "endNode": {
        "type": "belongsTo",
        "model": "node",
        "foreignKey": "endNodeId"
      }
    }
    

    请注意,我对属性名称使用了
    endNodeId
    startNodeId
    ,以在relationships.json中保留您的关系名称,因为在模型中不能同时使用相同名称的关系和属性。

    relationships.json中的外键不正确。请尝试使用与node.json中相同的键。“foreignKey”:“startNode”和“foreignKey”:“endNode”而不是“foreignKey”:“nodeId”。我已经试过了-(,最后我决定放弃,并使用远程方法在代码中实现逻辑。我认为问题在于,我有两个指向同一模型的定向关系。如果我可以控制关系一点,而不是依赖“魔法”,那将是一种改进“。我的意思是,您可以配置FK显式。在我的示例中:Node.id Relationship.startId(槽)Relationship.endId Node.id。