Пн goose: как обновить документ при обновлении вложенного документа? - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть документ User, который содержит массив messages. Этот массив messages заполняется Conversations документами, чья User является частью.

const userSchema = new mongoose.Schema({
  // classic infos (password, email, etc.)
  messages: [{ type: Schema.types.ObjectId, ref: "Conversation" }]
  }
  
  
  const conversationSchema = new mongoose.Schema(
  {
    name: { type: String, required: true, unique: true },
    senderId: { type: Schema.Types.ObjectId, ref: "User" },
    recipientId: { type: Schema.Types.ObjectId, ref: "User" },
    messageList: [{ message: { type: String }, author: { type: String } }],
    latestMessage: {
      author: { type: String },
      msgSnippet: { type: String },
      read: { type: Boolean },
    },
    default: null,
  },
  { timestamps: true }
);

conversationSchema.index({ name: 1 });

Когда кто-то пишет сообщение в Conversation, поле latestMessage обновляется. Таким образом, клиент может знать, что есть непрочитанные сообщения, если автор latestMessage отличается от пользователя клиента, а read имеет значение false. read будет обновлено до true, когда получатель откроет диалог.

На данный момент этот метод требует извлекать все latestMessage разговора на каждой странице refre sh, чтобы выполнить долгую проверку. Можно ли автоматически обновлять пользователя с полем hasUnreadMessage после каждой новой публикации?

Внимание, hasUnreadMessage не должен переключаться на false только из-за одного логика разговора c. В самом деле, что если в других разговорах есть непрочитанные сообщения для него? Кажется, что промежуточное ПО «pre» может творить чудеса, но я пока не мастер в этом.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...