【发布时间】:2025-12-16 11:25:01
【问题描述】:
一些我在文档中找不到答案的问题。
我正在尝试获得这样的结构:
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 部分是否正确,但我尝试了很多不同的组合,这似乎合乎逻辑。
History 模型不是公开的,因此不会作为端点公开。而且我想尽可能地利用关系,而不是有一个单独的端点。
这里的主要问题是我想使用Nodes.history.add(),就像描述的here一样。
但是我已经尝试了从Remote methods 到Operation Hooks 的所有不同方法,但我找不到提到的辅助方法。没有关于此的代码示例。
我认为部分原因是文档有时不是很清楚,或者假设对其他 API 框架的工作方式有一定程度的了解。我已经阅读了要找到的每一页文档。 (一个例子是Core concepts 页面链接到已弃用的Model hooks 页面。)
我想知道的:
- 是使用
.add()权限在模型上推送数据的想法,并让环回管理它应该存储它的位置,所以当我查询节点时,我会取回所有history项目,除非我阻止在服务器端(因为我不希望节点数据本身的每个请求都如此。 - 最好为每个历史项目创建一个单独的文档,其中包含 nodeId,还是更好地为每个节点创建一个历史项目,并将历史存储在其中?对我来说主要问题是,我如何
push数据,而不覆盖任何内容,也许使用timeStamp作为密钥? -
History模型是否需要知道它们与Nodes和BelongsTo的关系,或者它是否可以忽略它而仍然拥有Nodes.add()每个历史记录项?
【问题讨论】:
标签: javascript node.js loopbackjs strongloop