我在基于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个用户guids的房间。我认为save
对于现有文档可以作为update
,但它如何更新数组?如果$set
,为什么我有这样的3个用户房间。有什么想法可以吗?
答案 0 :(得分:0)
save()表现为插入。您必须将update()与{upsert:false}
一起使用