У меня возникли проблемы с настройкой правильной схемы разговора, в которой хранятся прочитанные/непрочитанные флаги разговоров и/или сообщений. Я хочу, чтобы текущий зарегистрированный пользователь мог видеть, сколько разговоров содержит в них новые сообщения. В настоящее время моя схема (с использованием реа-схема) выглядит немного как это:Схема разговора 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);
Моей мысль позади этого была обновить все сообщения поддокументов read
свойства с текущими пользователями ID, когда они открывают разговор. Затем я быстро обнаружил, что вы не можете update multiple subdocuments прямо сейчас.
Я открыт для изменения способа управления системой беседы, если у кого-то есть идея по правильному пути достижения этого. Еще одна вещь, о которой нужно помнить, - это то, что я хочу сохранить ее реактивной, то есть я должен запросить эту коллекцию, не используя агрегированные функции.
Фактически, я изначально построил систему так, как вы упомянули в последнем абзаце. Однако у меня возникли трудности с запросом данных. Я могу пересмотреть его. – SeanWM