环回:关系通过 - 不工作

时间:2018-05-02 07:10:28

标签: mongodb api foreign-keys relational-database loopback

所以,我被困在一个问题上,这应该很简单,而且我确信我错过了一些明显的东西

我正在关注此文档:

所以我有3张桌子

客户,团队,客户团队

client.json

{
  "name": "client",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "name": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {
    "teams": {
      "type": "hasMany",
      "model": "team",
      "foreignKey": "teamId",
      "through": "client-team"
    }
  },
  "acls": [],
  "methods": {}
}

team.json

{
  "name": "team",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "type": {
      "type": "string",
      "required": true,
      "default": "first-team"
    },
    "name": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {
    "clients": {
      "type": "hasMany",
      "model": "client",
      "foreignKey": "clientId",
      "through": "client-team"
    }
  },
  "acls": [],
  "methods": {}
}

客户team.json

{
  "name": "client-team",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "clientId": {
      "type": "string",
      "required": true
    },
    "teamId": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {
    "client": {
      "type": "belongsTo",
      "model": "Client",
      "foreignKey": "clientId"
    },
    "team": {
      "type": "belongsTo",
      "model": "Team",
      "foreignKey": "teamId"
    }
  },
  "acls": [],
  "methods": {}
}

因此所有关系设置正确(我认为)......

然后在我的客户中我有1个客户

[
  {
    "name": "Client name",
    "id": "59876185508eb519385779c6"
  }
]

在我的团队中我有很多,但肯定是这样的:

[
  {
    "type": "type",
    "name": "Team name",
    "id": "5ae8a37add2989a32d37f83d"
  }
]

然后我去了我的

  

本地主机:3000 /资源管理器

发布客户团队

像这样

{
    "clientId": "59876185508eb519385779c6",
    "teamId": "5ae8a37add2989a32d37f83d"
}

我得到200回复​​:

{
  "clientId": "59876185508eb519385779c6",
  "teamId": "5ae8a37add2989a32d37f83d",
  "id": "5ae961873a7e3b33f0579fc3"
}

所以连接就在那里......

但是,当我去“GET client / id”并做

  

id:59876185508eb519385779c6   过滤器:{“include”:[“团队”]}

这是回复

{
  "name": "Chelsea FC",
  "id": "59876185508eb519385779c6",
  "teams": []
}

同样的情况发生在“GET队/身份证”中,我使用

  

id:5ae8a37add2989a32d37f83d   过滤器:{“include”:[“clients”]}

或者如果我去“获取团队/ {id} / clients” 并把 id:5ae8a37add2989a32d37f83d

我得到了

[]

那么我做错了什么?我确信我错过了一个愚蠢而明显的事情:/

使用mongo如果有任何区别

1 个答案:

答案 0 :(得分:1)

这里有三个问题:

  1. 您将mongodb标识符描述为字符串,这就是您将字符串存储在数据库而不是对象ID中的原因。 (它不是必需的,因为数据源应该理解真实的类型)
  2. 您的模型从小写字母开始。关系也应该如此。 (问题的第一部分,它解决了ids的问题)
  3. 客户端和团队模型的关系不正确(问题的第二部分,它的修复包括在内)
  4. 客户team.json

    {
      "name": "client-team",
      "base": "PersistedModel",
      "idInjection": true,
      "options": {
        "validateUpsert": true
      },
      "properties": {
        "clientId": {
          "type": "objectId", // !!! changed (not required)
          "required": true
        },
        "teamId": {
          "type": "objectId", // !!! changed (not required)
          "required": true
        }
      },
      "validations": [],
      "relations": {
        "client": {
          "type": "belongsTo",
          "model": "client",  // !!! changed
          "foreignKey": "clientId"
        },
        "team": {
          "type": "belongsTo",
          "model": "team",  // !!! changed
          "foreignKey": "teamId"
        }
      },
      "acls": [],
      "methods": {}
    }
    

    client.json

    {
      "name": "client",
      "base": "PersistedModel",
      "idInjection": true,
      "options": {
        "validateUpsert": true
      },
      "properties": {
        "name": {
          "type": "string",
          "required": true
        }
      },
      "validations": [],
      "relations": {
        "teams": {
          "type": "hasMany",
          "model": "team",
          "foreignKey": "clientId", // !!! changed (we describing id of this model, not team)
          "through": "client-team"
        }
      },
      "acls": [],
      "methods": {}
    }
    

    team.json

    {
      "name": "team",
      "base": "PersistedModel",
      "idInjection": true,
      "options": {
        "validateUpsert": true
      },
      "properties": {
        "type": {
          "type": "string",
          "required": true,
          "default": "first-team"
        },
        "name": {
          "type": "string",
          "required": true
        }
      },
      "validations": [],
      "relations": {
        "clients": {
          "type": "hasMany",
          "model": "client",
          "foreignKey": "teamId", // !!! changed (the same as the previous)
          "through": "client-team"
        }
      },
      "acls": [],
      "methods": {}
    }