首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不修改其他数据的情况下更新所有具有相同字段的数据?

如何在不修改其他数据的情况下更新所有具有相同字段的数据?
EN

Stack Overflow用户
提问于 2021-10-19 12:30:32
回答 1查看 66关注 0票数 0

我有这个消息集合,由4个字段组成-- _id、conversationId、message。在我的消息控制器中,每次用户单击特定用户时,后端都会将具有相同conversationId的消息列表发送到前端(ReactJS)。在前端,消息列表将通过将seen的值从false更改为true来修改。然后我打算把这个传给后端。我的问题是,如何只修改具有相同conversationId的所有数据而不替换消息集合中的所有数据?

控制器,它将获取所有具有相同conversationID的消息

代码语言:javascript
复制
export const getMessage = async (req, res) => {
  try {
    const message = await messageModel
      .find({
        conversationId: req.params.messageId,
      })
      .populate('senderId');

    res.status(200).json(message);
  } catch (error) {
    res.status(500).json({ msg: error.message });
  }
};

返回值

代码语言:javascript
复制
[
  {
    _id: '616d76e858abdc3fa4059ee3',
    conversationId: '61696e3ed94cd23f8c22f75a',
    message: 'Sample One',
    seen: false
  },
  {

    _id: '616d779458abdc3fa4059f53',
    conversationId: '61696e3ed94cd23f8c22f75a',
    message: 'Sample Two',
    seen: false
  }
]

前端函数,它将改变已见的值

代码语言:javascript
复制
const handleUpdateSeen= (conversation) => {
    dispatch(updateTaskSeenById(conversation));
};

将发送到后端的值以及我希望在messageCollection上更改的输出

代码语言:javascript
复制
[
  {
    _id: '616d76e858abdc3fa4059ee3',
    conversationId: '61696e3ed94cd23f8c22f75a',
    message: 'Sample One',
    seen: true
  },
  {

    _id: '616d779458abdc3fa4059f53',
    conversationId: '61696e3ed94cd23f8c22f75a',
    message: 'Sample Two',
    seen: true
  }
]

解决方案我做了

代码语言:javascript
复制
export const updateMessageSeen = async (req, res) => {
  try {
    var updatedData;

    for (let i = 0; i < req.body.length; i++) {
      update = {
        _id: req.body[i]._id,
        conversationId: req.body[i].conversationId,
        senderId: req.body[i].senderId._id,
        messageText: req.body[i].messageText,
        messageMedia: req.body[i].messageMedia,
        seen: req.body[i].seen,
        createdAt: req.body[i].createdAt,
      };
    }
    await messageModel.updateMany(
      { conversationId: req.params.conversationId },
      updatedData
    );
  } catch (error) {
    res.status(500).json({ msg: error.message });
  }
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-19 13:16:39

可以使用Model.updateMany更新集合中的多个文档。

代码语言:javascript
复制
export const seenMessageById = async (req, res) => {
    try {
        if (Array.isArray(req.body) && req.body.length > 0) {
            const idList = req.body.map( message => message._id);
            const result = await messageModel.updateMany({ _id: { $in: idList }}, { seen: true });
            res.status(200).json({ msg: `Total ${result.nModified} documents updated` });
        } else {
            res.status(400).json({ msg: 'Atleast 1 message required to update.' });
        }
    } catch (error) {
        res.status(500).json({ msg: error.message });
    }
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69630859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档