首页 > 解决方案 > 使用 mongoose 从 MongoDB 更新 FrontEnd 上的列表并做出反应

问题描述

我正在建立一个网站,用户可以在其中实时选择飞机上的座位。在主页上,他们选择座位号,然后使用 mongoose 将其发送到 mongoDB 数据库。但是,当用户选择一个座位时,我不希望其他用户能够从列表中选择同一个座位,因为它已被占用。
我应该怎么做才能只在主页的下拉列表中显示可用座位?我正在考虑使用套接字,但我很难找到一种方法来了解哪些座位可用,哪些不是基于 mongo 数据库集合中的现有用户。
我正在使用 react 并且对编码比较陌生。
谢谢您的帮助!

标签: javascriptreactjsmongodbmongoose

解决方案


所以这是我可以探索的一个可能的解决方案(我相信肯定有更多的解决方案,但目前在写这篇文章时,这是我能想到的解决方案)。

  • 所以我假设你可能有用户模型,假设模型看起来有点像下面这样:
const userSchema = mongoose.Schema({
   
    username:{type:String, required:true},
    email:{type:String, required:true, email},
    password:{type:String, required:true}

})
const userModel = mongoose.model('userModel', userSchema);

  • 因此,我们已经设置了所有用户模型,并且我们可以通过 mongoose 或我们设置为唯一的电子邮件提供的_id来唯一地识别用户。

所以现在我们需要一个飞机旅行模型:

const planeTripSchema = mongoose.Schema({
   
    from:{type:String, required:true},
    to:{type:String, required:true},
    seats:{type:Array, required:true}
});

const planeTrip = mongoose.model('planeTrip', planeTripSchema);
  • 现在我们有一个飞机旅行模型。
  • 所以现在我该如何处理你的座位阵列中有不同的座位

创建飞机旅行以设置唯一值以识别每个座位时的实现:

  • 所以首先我会安装uuid npm i uuidyarn add uuid
  • 所以现在这取决于这趟航班可以乘坐多少人,假设它需要 10 人。

所以这种方式可能不是最有效的解决方案,但这是我目前在写这篇文章时的想法

  • 因此,现在您的目标是设置 10 个座位,然后才能节省飞行行程

  • 那么你要做的是你可以有10个变量seat1-seat10(这是这个解决方案效率低下的地方)并调用他uuid的lib来获取唯一标识符(将返回唯一编号)

  • 然后下面是您如何实例化新航班

const newFlight = new planeTrip({
    
    from:'New York',
    to:'Washington DC',
    seats:[
        
        {
            occupied:false
            seat_id:<use the variable you made when using uuid for seat1-10
            seat_number:1 // You can then populate each sit number self from 1-10 on each entry but id you'll get fom uuid
            person:"",
        }
        //So you can do this 10 time because plane supports 10 seats in this exampl

    ]

}) 
  • 因此,现在当您将文档保存到 mongoDB 时,您就有了可以唯一标识的席位

那么现在你如何处理占用的座位:

  • 因此,现在在客户端,当您请求获取航班座位详细信息时,您将使用 JavaScript 映射映射座位数组,然后检查是否被占用 === true,正如我们上面写的那样

  • 所以这是真的,那么你可以原样离开

  • 否则,如果它为假,您可以使用 CSS 在座位号上加下划线

  • 这意味着您的 css 类还必须进行一些三元运算

  • 一个普通用户肯定会知道它被占用了

  • 然后,当用户单击可用的座位时,您会通过座位号和座位号坐下,当您映射座位数组时,这些座位号和座位号很容易获得

  • 不要忘记您还必须通过用户的电子邮件发送,因为在我们的示例中,我们使用电子邮件唯一标识我们的用户

  • 然后在后端,您唯一要做的就是将您从客户端获得的坐席 ID 从false更新true

  • 您还将人员从空字符串更新为从客户端收到的电子邮件

所以这是一个可能的解决方案,如果你坐下来仔细考虑,可以改进,但至少我给了你一个方向的起点,但我相信这个解决方案可以改进为比这更有效


推荐阅读