2016-01-29 2 views
6

Некоторые вопросы, на которые я не могу найти ответ в документации.Strongloop EmbedsMany вспомогательные методы не найдены

Я пытаюсь получить структуру, как это:

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 странице.)

Что я хотел бы знать:

  1. Есть идея использовать .add() право передавать данные на модели, и иметь обратную петлю управляйте им, где он должен хранить его, поэтому, когда я запрашиваю Узел, я бы возвращал все пункты history, если только я не предотвращу это на стороне сервера (потому что я не хочу, чтобы каждый запрос для самих данных узла.
  2. Is это хорошая идея создать отдельный документ для каждого элемента History, с nodeId в нем или лучше сделать один элемент histoy на узел и сохранить histo внутри них? Основной проблемой для меня является: Как сделать данные push, не перезаписывая что-либо, и, возможно, используя timeStamp в качестве ключа?
  3. ли History модель нужно знать об их отношении к Nodes с BelongsTo или это может быть не обращая внимания на него и до сих пор Nodes.add() каждого пункта истории к нему?

ответ

1

Если я правильно понимаю вашу проблему правильно, вы могли бы сделать вместо NodehasManyHistory.Затем использовать все методы, сгенерированные из соотношения:

Чтобы создать новую историю, используя соотношение

POST api/Node/{NodeId}/Histories/ 

Вы должны быть в состоянии создать несколько экземпляров истории с одного запроса POST путем записи данных в формате JSON соответствующим

{ 
    { 
     ts: 26283829879 
    }, 
    { 
     ts: 5335329923 
    } 
} 

Чтобы получить одну историю от узла

GET api/Node/{NodeId}/Histories/{HistoryId}/ 

Вы также можете получить все истории с узла, отредактировать любую историю данного узла и т. Д.

Полезно?

См. Документы StrongLoop для HasMany relations.

+0

Мне нужно уметь «.add» несколько элементов истории сразу. – TrySpace

+0

Нет ничего, что мешает вам это сделать. Я полагаю, что это основано на модели Persisted. См. Https://apidocs.strongloop.com/loopback/#persistedmodel-create * Необязательный аргумент данных. Может быть либо экземпляром одной модели, либо массивом экземпляров. * Я отредактировал свой пост, посмотрим, решает ли эта проблема. – Overdrivr

+0

Проблема с тем, что я не хочу 'создавать'' Node', он уже существует, поэтому я должен использовать его в 'findById', а затем добавить что-то ... – TrySpace

Смежные вопросы