有些问题我无法在文档中找到答案。
我试图获得这样的结构:
Node:
id: '1sdf12asd123',
name: 'node1',
history:
[ ts: 234234234234,
data: { 'foo': 'bar' }
],
...
所以每个单独的节点都有很多历史项目。我希望能够push
新数据,而不会覆盖任何内容。
现在,我不想将所有内容存储在每个节点下,而是存储在单独的文档中,所以我认为embedsMany适合这个:
{
"name": "Node",
"plural": "Nodes",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"name": {
"type": "string"
}
},
"validations": [],
"relations": {
"history": {
"type": "embedsMany",
"model": "History",
"foreignKey": "HistoryId"
}
},
"acls": [],
"methods": {}
}
所以历史就是这样:
{
"name": "History",
"base": "PersistedModel",
"idInjection": true,
"properties": {
"ts": {
"type": "Date"
},
"data": {
"type": "Object"
}
},
"validations": [],
"relations": {
"node": {
"type": "belongsTo",
"model": "Node",
"foreignKey": "NodeId"
}
},
"acls": [],
"methods": {}
}
我不确定foreignKey部分是否正确,但我尝试了很多不同的组合,而且这个组合似乎是合乎逻辑的。
历史模型不公开,因此不作为端点公开。我希望尽可能多地利用关系,而不是单独的终点。
这里的主要问题是我想使用Nodes.history.add()
,如here所述。
但我已尝试过从Remote methods
到Operation Hooks
的所有不同方法,但我无法找到所提到的辅助方法。没有代码示例可以找到。
部分我认为这是因为文档有时不是很清楚,或者对其他API框架的工作方式有一定程度的了解。我已经阅读了有关可以找到的每一页文档。 (一个示例是Core concepts
页面链接到已弃用的Model hooks
页面。)
我想知道的事情:
.add()
权限来推送模型上的数据,并使用loopback管理应该存储它的位置的想法,所以当我查询节点时,我会收回所有history
项目,除非我在服务器端防止这种情况(因为我不希望每次请求节点数据本身。push
数据,而不会覆盖任何内容,并可能使用timeStamp
作为密钥?History
模型是否需要了解它们与Nodes
与BelongsTo
的关系,或者它是否可以忽略它并且每个Nodes
.add()
历史项目呢?答案 0 :(得分:1)
如果我能正确理解您的问题,您可以改为Node
hasMany
History
。然后使用从关系:
使用关系
创建新历史记录POST api/Node/{NodeId}/Histories/
通过适当地编写JSON数据,您应该能够通过单个POST请求创建多个历史记录实例
{
{
ts: 26283829879
},
{
ts: 5335329923
}
}
从节点获取单个历史记录
GET api/Node/{NodeId}/Histories/{HistoryId}/
您还可以从节点获取所有历史记录,编辑给定节点的任何历史记录等。
这有用吗?
请参阅HasMany relations的StrongLoop文档。