2016-03-10 2 views
1

У меня есть метеорное приложение, состоящее из «блокнотов», каждый из которых содержит массив «заметок», которые можно вставлять в любую позицию, удалять или редактировать строки. Этот массив содержится внутри объекта с множеством другой информации (например, имя, пользователи и т. Д.). Каждый объект в моем основном документе будет содержать один из этих массивов. Например:Публикация встроенного массива документов в Meteor

{ 
    "_id": "1234", 
    "name": "NotePad123", 
    "notes": [ {note: "this is my first test note"}, 
      {note: "this is my second test note"}, 
      {note: "this is my third test note"} ] 
},{ 
    "_id": "4321", 
    "name": "NotePad321", 
    "notes": [ {note: "noteA"}, 
      {note: "noteB"}, 
      {note: "noteC"} ] 
} 

Есть ли способ, что я могу передать «записку» в качестве своей собственной коллекции моего клиента так, что клиент может непосредственно редактировать его, как если бы не было вложены? Я беспокоюсь о хите производительности, если мне нужно передавать полный блок заметок на сервер каждый раз, когда я хочу его обновить, так как может быть много обновлений, он может стать довольно большим.

Я понимаю, что я могу создать новый документ и указать его as described here, но это может стать довольно беспокойным со многими «блокнотами», поскольку упорядочение важно, и у меня будет много строк, связанных с каждым из моих основных объектов.

+0

что где выбор денормализацию или не должно быть сделано для определения вашей БД схемы: если вы ожидаете много нот детали, но в блокноте всегда есть те же заметки, или, по крайней мере, они не чересчур часто, тогда может быть разумным иметь заметки в своей коллекции. – MrE

+0

Посмотрите на это: http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1 для получения дополнительной информации о денормализации – MrE

+0

Я ожидаю, что каждый блокнот будет имеют уникальный набор нот, но набор нот может быть порядка 100's-1000. Я также беспокоюсь о быстрых обновлениях набора заметок. У меня возникает ощущение, что мне просто нужно, чтобы набор заметок был его собственной коллекцией со ссылкой на блокнот (как и в SQL DB). – Fozefy

ответ

0

Вы можете сделать коллекцию на стороне клиента, в которую вы помещаете заметки. Затем вызовите метод для внесения изменений после сохранения.

Вот как сделать коллекцию на стороне клиента:

var notes = new Meteor.Collection(null)

+0

Это возможное решение, но я бы предпочел сохранять строки заметки в реальном времени, так что, если пользователь переходит от страницы, все уже сохранено (за исключением, возможно, строки, которую они в настоящее время редактируют). – Fozefy

+1

Вы можете совершать вызов метода после каждой строки, затем на сервере суммировать результаты и помещать их в объект заметок. – sys13

+0

Это в основном то, что я делал. Хотя я сделал стандартную публикацию/подписку, чтобы пользователь мог видеть заметки, обновленные в реальном времени. Затем я создал обновленные, вставляемые и удаляемые вызовы метода на сервер, которые содержат только одну заметку и ее индекс. Это означает, что мы пропускаем только одну ноту «по проводам». Затем сервер вытаскивает массив заметок, обновляет указанную заметку и затем устанавливает ее в БД. В целом довольно просто, но я думал, что мне придется собирать клиентскую сторону, а затем отправить полный массив обратно, что это решение не требует. – Fozefy

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