我有這個訊息集合由 4 個欄位 _id、conversationId、message、 seen 組成。在我的訊息控制器中,每次用戶單擊特定用戶時,后端都會將具有相同 sessionId 的訊息串列發送到前端(reactJS)。在前端,將通過將 seen 的值從 false 更改為 true 來修改訊息串列。然后我打算將它傳遞給后端。我的問題是如何只修改所有具有相同 sessionId 的資料而不替換訊息集合中的所有資料
將獲取所有具有相同 sessionID 的訊息的控制器
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 });
}
};
回傳值
[
{
_id: '616d76e858abdc3fa4059ee3',
conversationId: '61696e3ed94cd23f8c22f75a',
message: 'Sample One',
seen: false
},
{
_id: '616d779458abdc3fa4059f53',
conversationId: '61696e3ed94cd23f8c22f75a',
message: 'Sample Two',
seen: false
}
]
前端函式將改變 seen 的值
const handleUpdateSeen= (conversation) => {
dispatch(updateTaskSeenById(conversation));
};
將發送到后端的值以及我想在 messageCollection 上更改的輸出
[
{
_id: '616d76e858abdc3fa4059ee3',
conversationId: '61696e3ed94cd23f8c22f75a',
message: 'Sample One',
seen: true
},
{
_id: '616d779458abdc3fa4059f53',
conversationId: '61696e3ed94cd23f8c22f75a',
message: 'Sample Two',
seen: true
}
]
我做的解決方案
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 });
}
};
uj5u.com熱心網友回復:
您可以使用Model.updateMany更新集合中的多個檔案。
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 });
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/324656.html
