mongoose 数据库未正确填充

pw9qyyiw  于 5个月前  发布在  Go
关注(0)|答案(1)|浏览(56)

这是我的消息控制器,我试图在消息中填充聊天,一旦它被创建,以同样的方式,我想填充聊天的用户,但发送者正在正确填充,其他人没有被填充。此外,我通过 Postman 发送请求,chatId作为字符串接收,甚至我试图将其转换为objectId,它不工作,不填充

const Message = require("../models/messageSchema");
const User = require("../models/userSchema");
const Chat = require("../models/chatSchema");
module.exports.sendMessage = async function (req, res) {
  const { chatId, content } = req.body;
  if (!content || !chatId) {
    console.log("Invalid data passed into the request");
    return res.status(400).send("Internal Server Error");
  }
  var newMessage = {
    sender: req.user.id,
    content: content,
    chatId: chatId,
  };
  try {
    var message = await Message.create(newMessage);
    message = await message.populate("sender", "name profileImage");
    message = await message.populate("chat");
    console.log(message.chat);
    message = await User.populate(message, {
      path: "chat.users",
      select: "name email profileImage",
    });

    await Chat.findOneAndUpdate({ _id: chatId }, { latestMessage: message });
    res.json(message);

    // res.status(200).send(message);
  } catch (error) {
    console.log("Error in sending message", error);
    res.status(400).send("Internal Server Error");
  }
};

module.exports.fetchAllMessages = async function (req, res) {
  try {
    const messages = await Message.find({ chat: req.params.chatId })
      .populate("sender", "name profileImage email")
      .populate("chat");

    console.log(messages);
    res.status(200).send(messages);
  } catch (error) {
    console.log(`Error in fetching all the message ${error}`);
    res.status(400).send("Internal Server Error !");
  }
};

字符串
我的messageSchema是

const mongoose = require("mongoose");

const messageSchema = mongoose.Schema(
  {
    sender: {
      type: mongoose.Schema.Types.ObjectId,
      ref: "User",
    },
    readBy: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }],
    content: { type: String, trim: true },
    chat: { type: mongoose.Schema.Types.ObjectId, ref: "Chat" },
  },
  { timestamps: true }
);

const Message = mongoose.model("Message", messageSchema);
module.exports = Message;


`
我试图填充聊天消息,但收到未定义

of1yzvn4

of1yzvn41#

确保聊天对象具有正确的模式,包括用户字段(或引用用户的任何字段),以填充聊天中涉及的用户。下面是修改后的代码:

const Message = require("../models/messageSchema");
const User = require("../models/userSchema");
const Chat = require("../models/chatSchema");

module.exports.sendMessage = async function (req, res) {
  const { chatId, content } = req.body;
  
  if (!content || !chatId) {
    console.log("Invalid data passed into the request");
    return res.status(400).send("Internal Server Error");
  }
  
  try {
    const newMessage = await Message.create({
      sender: req.user.id,
      content: content,
      chat: chatId, // Assign chatId to the chat field directly
    });

    const populatedMessage = await newMessage
      .populate("sender", "name profileImage")
      .populate("chat")
      .execPopulate();

    console.log(populatedMessage.chat); // Check if chat is populated

   
    const populatedChat = await Chat.findById(chatId).populate({
      path: "users",
      select: "name email profileImage",
    });

   
    await Chat.findByIdAndUpdate(chatId, { latestMessage: populatedMessage });

    res.json(populatedMessage);
  } catch (error) {
    console.log("Error in sending message", error);
    res.status(400).send("Internal Server Error");
  }
};

字符串

相关问题