Пн goose: создать один и тот же поддокумент в нескольких местах - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть структура чата, в которой хранятся и все сообщения, и последнее сообщение в одном родительском документе (chat). Когда пользователь отправляет сообщение, мне нужно обновить last_message и добавить новое сообщение в массив messages. Можно ли сделать это в одном обновлении, чтобы _id, created_at и updated_at были одинаковыми в обоих поддокументах?

Вот моя попытка, которая не работает:

const message = {
      content: req.body.contentg,
      sender: sender.toObject(),
};
const chat = await Chat.findOneAndUpdate({
  _id: toObjectId(req.params.chat_id),
  status: 'active',
 }, {
  last_message: message,
  $push: { messages: message },
}, {
  new: true,
});

Обновление: Добавлены схемы (я использую ts-mon goose)

export const MessageSenderSchema = createSchema({
    last_name: Type.string(),
    first_name: Type.string(),
    phone: Type.string({ required: true }),
    email: Type.string(),
    status: Type.string({ enum: UserStatuses, required: true }),
}, {
    skipVersioning: true,
});

export const ChatMessageSchema = createSchema({
    content: Type.string({ required: true }),
    status: Type.string({ enum: ChatMessageStatuses, default: 'new' }),
    sender: Type.schema({ require: true }).of(MessageSenderSchema),
});
ChatMessageSchema.set('timestamps', { createdAt: 'created_at', updatedAt: 'updated_at' });

export const ChatSchema = createSchema({
    __v: Type.number({ select: false }),
    status: Type.string({ enum: ChatStatuses, default: 'active', required: true }),
    members: Type.array().of({
        $ref: Type.string(),
        $id: Type.objectId(),
        $db: Type.string({ required: false }),
    }),
    messages: Type.array().of(ChatMessageSchema),
    last_message: Type.schema().of(ChatMessageSchema),
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...