1

質問

要するに、私の質問は次のとおりです。ドキュメント内の配列が変更された場合、ユーザーは新しい配列を受け取るのでしょうか、それとも変更だけを受け取るのでしょうか?

その質問が不明な場合は、以下に問題を説明しました。

問題

2 人のユーザーが値をプッシュする配列フィールドを含むドキュメントのコレクションがあります。このコレクション内のドキュメントは次のようになります。

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は最初から空であり、ユーザーは順番に値をプッシュします。

ユーザーの 1 人が何らかの値を にプッシュするdataと、サーバーはその変更を 2 番目のユーザーに送信します。2 番目のユーザーは -array 全体を受け取るのdataでしょうか、それとも変更 (プッシュされた値) だけを受け取るのでしょうか? dataプッシュされたのは単一の値であるにもかかわらず、2 番目のユーザーが -array 全体を受け取るのではないかと少し心配です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。これには(私は知っています)、最初のソリューションにあると恐れているマイナス面はありません(ただし、マイナス面がない場合は、最初のソリューションを使用します)。

4

2 に答える 2

1

https://github.com/meteor/meteor/blob/master/packages/livedata/DDP.mdに従って

  • changed(サーバー -> クライアント):
    • collection: string(コレクション名)
    • id: string(文書ID)
    • fields: EJSON 値を持つオプションのオブジェクト
    • cleared: オプションの文字列配列 (削除するフィールド名)

ユーザーは新しいアレイを受け取ります。「差分」のみを送信するには、{userId: userId, value: value}ドキュメントのコレクションを使用します。

于 2013-08-08T05:49:10.993 に答える
0

user728291 のコメントに従って送信されたものを調べたところ、プッシュされた値だけでなく、配列フィールド全体が送信されたようです。これが常に当てはまるかどうかはわかりません (少数の小さな値を含む配列でテストしたところです。配列に多くの値または大きな値が含まれている場合、Meteor は、私の小さなテストでは確認できなかった最適化を試みる可能性があります)。配列フィールドの代わりに別のコレクションを使用するソリューションを使用します。

于 2013-08-06T13:51:14.383 に答える