【发布时间】:2016-09-03 10:25:00
【问题描述】:
我在基于 NodeJS 和 MongoDB 的聊天应用程序中有以下代码来更改房间的管理员:
export function setAdmin(room, user) {
const userGuid = getGuid(user);
if (room.users && room.users.length) {
// filter current and new
room.users = room.users.filter(guid =>
guid !== room.adminGuid && guid !== userGuid
);
} else {
room.users = [];
}
room.users.push(userGuid);
room.adminGuid = userGuid;
return roomsCollection.save(room, { w: 1 });
}
每个房间只有 2 个用户:管理员和客户。 更新多个房间:
const rooms = await roomsCollection.find({ adminGuid: currentAdminGuid }).toArray();
for (const room of rooms) {
await setAdmin(room, newAdminUser);
}
我的应用程序在高负载下遇到了一些问题。它们在索引的帮助下得到了解决。
但是在使用 MongoDB 转储之后,我发现我的房间在 room.users 数组中有 3 个用户 guid。我认为save 可以作为现有文档的update,但它如何更新数组?如果$set,为什么我有这么3个用户房间。有什么想法怎么可能?
【问题讨论】:
标签: node.js mongodb ecmascript-6