我正在实现一个通知系统,其中我有一个具有以下架构的notifications
集合:
{
user_id: Number,
message: String,
count: Number,
timestamp: Date
}
每当同一用户有2个或更多相同message
的连续通知时,我想要防止存储所有这些通知.相反,我只想将count
加1.
以下是使用上述方法处理插入新通知的node.js代码:
async function createNotification(user_id, message) {
const notifications = db.collection('notifications');
const [lastNotification] = await notifications.find({ user_id })
.sort({ timestamp: -1 }).limit(1).toArray();
if(lastNotifcation?.message === message) {
await notifications.updateOne(
{ _id: lastNotifcation._id },
{ count: lastNotifcation.count+1 },
)
} else {
await notifications.insertOne({ user_id, message, count: 1, timestamp: new Date() });
}
}
虽然上面的代码可以工作,但它不是原子的(它不是单个操作). 我如何用一次操作而不是两次操作来实现上述逻辑?