首页 > 解决方案 > 使用 mongodb 在 nodejs 上对用户的参与者进行分组

问题描述

我是 MongoDB 的新手 这是我想使用 mongoose 和 nodejs 实现的东西 如何对房间描述进行分组的参与者基础知识。

//这里是架构

房间.js

  //ROOMS
const schema = mongoose.Schema({
    "total_participants":{type: Number, default: 3},
    "group_id": {type:String, default: ()=>utils.randomString(16)}
}

参与者.js

    //participants
        const schema = mongoose.Schema({
            ---,
            "group_id":String
        });

API代码,当有人加入房间时,当有人首先尝试加入时,它会从房间中获取groupId并保存在参与者中,然后检查该房间中加入的参与者总数,如果我满了,它会生成一个新的ID并更新在房间里

        const room= await RoomModel.findOne({_id: "5f2fde82b64b4e1c787ea611"})
        await new ParticipantsModel({"group_id": room.group_id}).save()

        const newGroupId= utils.randomString(16)
        const filled =await ParticipantsModel.countDocuments({group_id: room.group_id})
        console.log("filled "+filled)
        await RoomModel.updateOne({total_participants:filled},{group_id: newGroupId}).exec()

我在这里面临的问题是,当多个用户同时发送 50 个用户发送加入请求时,房间中的参与者总数比房间中的参与者更多,而新房间 Id 没有得到更新。

标签: javascriptnode.jsmongodbmongoose

解决方案


这可能是一个并发问题;当您插入新参与者时,房间尚未标记为已满,另一个可以进入。

在这种情况下,您需要使用事务:https ://mongoosejs.com/docs/transactions.html


推荐阅读