2016-04-26 12 views
0

会話やメッセージの読み取り/未読フラグを保存する適切な会話スキーマの設定に問題があります。現在のログインしているユーザーが、会話の中にいくつの会話に新しいメッセージがあるかを確認できるようにします。現在、(imple-スキーマを使用して)私のスキーマは少し次のようになります。この背後Meteor/MongoDB会話スキーマ

Schema = {}; 

Schema.ConversationMessageRead = new SimpleSchema(
    { 
     "userId": { 
      type: String 
     }, 
     "createdAt": { 
      type: Date 
     } 
    } 
); 

Schema.ConversationMessage = new SimpleSchema(
    { 
     "userId": { 
      type: String 
     }, 
     "message": { 
      type: String, 
      optional: true 
     }, 
     "read": { 
      type: [Schema.ConversationMessageRead], 
      optional: true 
     }, 
     "createdAt": { 
      type: Date 
     } 
    } 
); 

Schema.Conversation = new SimpleSchema(
    { 
     "participants": { 
      type: [String], 
      optional: false 
     }, 
     "messages": { 
      type: [Schema.ConversationMessage], 
      optional: true 
     }, 
     "deleted": { 
      type: Boolean, 
      optional: false, 
      defaultValue: false 
     }, 
     "createdAt": { 
      type: Date 
     } 
    } 
); 

Conversations = new Mongo.Collection("conversations"); 
Conversations.attachSchema(Schema.Conversation); 

私の考えは、すべてのメッセージは、彼らが会話を開き、現在のユーザーIDとreadプロパティをサブ文書更新しました。私はすぐにすぐにできないことを知った。

誰かがこれを達成するための適切な方法についてアイデアを持っている場合、会話システムの管理方法を変更することができます。私が気をつけておくべきもう一つのことは、それを反応的なものにしておきたいということです。集約関数を使わずにこのコレクションを照会しなければならないということです。速いである(そして、挿入読み取り専用)このコレクション内の

Schema.EventLog = new SimpleSchema({ 
    userId: { type: String }, 
    conversationMessageId: { type: String }, 
    createdAt: { type: Date } 
}); 

ドキュメントが変更されることはありませんになります。これを行うには

答えて

0

一つの方法は、イベントログ収集を持っているだろう。

conversationMessagesを一度に読むように設定すると、ユーザーが会話を読む最後の日時を保存しておけば、その会話内のメッセージがあるかどうかを確認できます最後の読まれた日付より新しいですか?同じ目的を達成するためのデータが非常に少ない。

+0

実際、私はもともと最後の段落で述べた方法でシステムを構築しました。私はデータを照会するのが難しかった。私はそれを再訪するかもしれない。 – SeanWM

0

私が正しく理解している場合、これは複数の更新ではなく、ユーザーが投稿を閲覧するたびにサブ文書の配列に1つ追加されますか?私はこのコマンドが望ましい結果を達成すると思います:

Conversations.update(
    { _id: CONVERSATION_ID }, 
    { 
     $push: { 
      'messages.read': NEW_CONVERSATION_MESSAGE_READ_OBJECT } 
    } 
) 
関連する問題