将嵌入的文档数组发布到Meteor

将嵌入的文档数组发布到Meteor,meteor,Meteor,我有一个由“记事本”组成的meteor应用程序,每个记事本都包含一组“笔记”,可以在任何位置插入、删除或编辑行。该数组包含在一个对象中,该对象包含各种其他信息(例如名称、用户等)。主文档中的每个对象都将包含其中一个数组。例如: { "_id": "1234", "name": "NotePad123", "notes": [ {note: "this is my first test note"}, {note: "this is my second tes

我有一个由“记事本”组成的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"} ]
}
是否有任何方法可以将“注释”作为其自己的集合传递给我的客户,以便客户可以直接编辑它,就好像它没有嵌入一样?如果每次我想更新时都需要将完整的notes数组传递给服务器,我担心性能会受到影响,因为可能会有很多更新,所以可能会变得相当大


我意识到我可以创建一个新文档并引用它,但这可能会变得非常繁忙,因为排序很重要,而且我将有许多行与我的每个主要对象关联。

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

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


var notes=new Meteor.Collection(null)

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

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


var notes=new Meteor.Collection(null)

这就是定义DB模式时必须选择非规范化或非规范化的地方:如果您希望有许多注释项,但记事本总是有相同的注释,或者至少它们不经常更改,那么,在自己的集合中有笔记可能是明智的。看看这个:要了解更多关于非规范化的信息,我希望每个记事本都有一组独特的笔记,但笔记的数量可能在100到1000之间。我还担心笔记集的快速更新。我觉得我只需要将注释集作为它自己的集合,并引用记事本(就像我在SQL DB中所做的那样)。由于用户界面乐观,您可能不需要太担心实际的数据库性能。这就是定义数据库架构时必须选择非规范化或非规范化的地方:如果您希望有许多注释项,但记事本总是有相同的注释,或者至少它们不经常更改,那么,在自己的集合中有笔记可能是明智的。看看这个:要了解更多关于非规范化的信息,我希望每个记事本都有一组独特的笔记,但笔记的数量可能在100到1000之间。我还担心笔记集的快速更新。我觉得我只需要将注释集作为它自己的集合,并引用记事本(就像我在SQL DB中所做的那样)。由于用户界面乐观,您可能不需要太担心实际的DB性能。这是一个可能的解决方案,但我更喜欢实时保存注释行,这样,如果用户离开页面,所有内容都已保存(可能除了他们当前编辑的行)。您可以在每行之后进行方法调用,然后在服务器上聚合结果并将其放入notes对象中。这基本上就是我最后所做的。虽然我做了一个标准的发布/订阅,这样用户可以看到实时更新的笔记。然后,我创建了对服务器的updated、insert和delete方法调用,这些调用只包括一个注释及其索引。这意味着我们只传递一个音符“穿过电线”。然后,服务器提取注释数组,更新指定的注释,然后在数据库中设置它。总的来说非常简单,但我认为我必须聚合客户端,然后将完整的数组发送回来,这是一个可行的解决方案。这是一个可行的解决方案,但我更愿意实时保存注释行,这样,如果用户离开页面,所有内容都已经保存(可能除了他们当前正在编辑的行)。您可以在每行之后进行方法调用,然后在服务器上聚合结果并将其放入notes对象中。这基本上就是我最后所做的。虽然我执行了标准发布/订阅,以便用户可以看到实时更新的notes。然后我创建了对服务器的更新、插入和删除方法调用,其中仅包括一个便笺及其索引。这意味着我们只“通过线路”传递一个便笺。然后服务器提取便笺数组,更新指定的便笺,然后将其设置到数据库中。总体来说非常简单,但我认为我必须聚合客户端,然后将完整的数组发送回服务器,这一解决方案不需要。