会話やメッセージの読み取り/未読フラグを保存する適切な会話スキーマの設定に問題があります。現在のログインしているユーザーが、会話の中にいくつの会話に新しいメッセージがあるかを確認できるようにします。現在、(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 }
});
ドキュメントが変更されることはありませんになります。これを行うには
実際、私はもともと最後の段落で述べた方法でシステムを構築しました。私はデータを照会するのが難しかった。私はそれを再訪するかもしれない。 – SeanWM