【发布时间】:2022-11-19 22:51:06
【问题描述】:
我有一个集合“用户”
{
"id": "u101",
"notifications": {}
},
{
"id": "u102",
"notifications": {"channelId": 1}
},
有一个包含对象的通知字段。该对象的每个字段都对应一个聊天频道 ID,它们的值是频道中的通知数量(未读消息)。
如果用户“u101”和“u102”都在同一个频道并且他们收到通知,我需要创建一个“频道号”用户字段“u101”并将值设置为1个.我还需要更新用户“u102”的值并设置值“频道号”至2个
预期结果如下:
{
"id": "u101",
"notifications": {"channelId": 1}
},
{
"id": "u102",
"notifications": {"channelId": 2}
},
我试过通过简单地查询“用户”集合来做到这一点,让用户返回数组,然后使用 ES6 函数循环它,如下所示:
users.forEach(user => {
user.notifications.hasOwnProperty(channelId) ?
user.notifications[channelId]++
:
user.notifications[channelId] = 1
})
它运作良好,但问题是我需要循环更新所有用户
collection.updateOne({ '_id': user._id }, { $set: user })
它可以在一个频道中吸引大量用户。有没有一种方法可以通过一个 MongoDB 命令来实现?
【问题讨论】:
-
我认为您在这里寻找的主要内容是用于更新查询部分的
$in运算符
标签: javascript mongodb