在Meteor集合中,使用数组字段还是其他集合?

时间:2013-08-06 08:08:22

标签: arrays mongodb collections meteor field

问题

简而言之,我的问题是:当文档中的数组发生更改时,用户是否会收到新数组,或只是更改?

如果这个问题不清楚,我在下面描述了我的问题。

问题

我有一个集合,其文档包含两个用户将值推送到的数组字段。此集合中的文档类似于:

var document = {
    userId1: "...user id...", // The id of the first of the two users.
    userId2: "...user id...", // The id of the second of the two users.
    data: [] // The field the two users will push values to.
}

data从一开始就是空的,然后用户轮流推送值。

当其中一个用户将某个值推送到data时,服务器会将更改发送给第二个用户。第二个用户会收到整个data - 数组,还是仅收到更改(推送值)?我有点担心第二个用户会收到整个data - 数组,即使它只是一个被推送到它的值,如果data包含很多值,我担心这个将成为瓶颈。

是这样的吗?如果是,使用另一个集合存储值将解决它,对吧?像这样:

var document = {
    id: "...unique id...",
    userId1: "...user id...", // The id of the first of the two users.
    userId2: "...user id..." // The id of the second of the two users.
}

var documentData = {
    idReference: "...the unique id in the document above...", 
    value: "...a value..."
}

不是将值推送到document中的数组,而是将它们插入到包含documentData的集合中。这(我知道)不会有我担心第一个解决方案的缺点(但我宁愿使用第一个解决方案,如果它没有缺点)。

2 个答案:

答案 0 :(得分:1)

根据https://github.com/meteor/meteor/blob/master/packages/livedata/DDP.md

  
      
  • changed(服务器 - >客户端):   
        
    • collectionstring(收藏名称)
    •   
    • idstring(文件ID)
    •   
    • fields:具有EJSON值的可选对象
    •   
    • cleared:可选的字符串数组(要删除的字段名称)
    •   
  •   

用户将收到新阵列。要仅发送“差异”,请使用{userId: userId, value: value}个文档的集合。

答案 1 :(得分:0)

我检查了用户728291评论发送的内容,似乎发送了整个数组字段,而不仅仅是推送值。我不知道是否总是这样(我只是测试了一个包含少量和小值的数组;如果它包含很多或很大的值,Meteor可能会尝试进行一些优化,我无法在我的小视图中看到测试),但我将使用另一个集合而不是数组字段来解决该问题。