【问题标题】:Publish Embedded Document Array to Meteor将嵌入式文档数组发布到 Meteor
【发布时间】:2016-03-10 09:34:03
【问题描述】:

我有一个由“记事本”组成的流星应用程序,每个都包含一个“笔记”数组,可以插入到任何位置、删除或编辑行。该数组包含在具有各种其他信息(例如名称、用户等)的对象中。我的主文档中的每个对象都将包含这些数组之一。例如:

{
  "_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,但是这对于许多“记事本”来说可能会变得非常忙碌,因为排序很重要,而且我将有很多行与我的每个主要对象相关联。

【问题讨论】:

  • 这是定义数据库模式时必须选择是否非规范化的地方:如果您希望有很多笔记项目,但记事本总是有相同的笔记,或者至少它们没有变化通常,将笔记放在自己的收藏夹中可能是明智之举。
  • 查看这个:blog.mongodb.org/post/87200945828/… 了解更多关于非规范化的信息
  • 我希望每个记事本都有一组独特的笔记,但一组笔记可能在 100 到 1000 的数量级。我还担心对笔记集的快速更新。我感觉我只需要将一组笔记作为它自己的集合,并引用记事本(就像我在 SQL DB 中所做的那样)。
  • 由于乐观的 UI,您可能不需要过多担心实际的数据库性能。

标签: meteor


【解决方案1】:

您可以创建一个将笔记放入其中的客户端集合。然后,在您想要保存时调用一个方法进行更改。

创建客户端集合的方法如下:

var notes = new Meteor.Collection(null)

【讨论】:

  • 这是一个可能的解决方案,但我更喜欢实时保存注释行,这样如果用户离开页面,所有内容都已保存(可能除了他们当前正在编辑的行)。
  • 您可以在每一行之后进行方法调用,然后在服务器上汇总结果并将其放入 notes 对象中。
  • 这基本上是我最终做的。虽然我做了一个标准的发布/订阅,以便用户可以看到实时更新的笔记。然后我创建了对服务器的更新、插入和删除方法调用,其中只包含一个注释及其索引。这意味着我们只“通过电线”传递一个音符。然后服务器拉出笔记数组,更新指定的笔记,然后将其设置在数据库中。总体而言非常简单,但我认为我将不得不聚合客户端然后将整个数组发送回,而此解决方案不需要。
猜你喜欢
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
相关资源
最近更新 更多