【问题标题】:create mongodb list inside of a table在表内创建 mongodb 列表
【发布时间】:2017-05-03 06:52:53
【问题描述】:

我想创建一个聊天应用程序。 我需要决定我的数据库会是什么样子。 我使用 mongodb 作为数据库。

我想要一个名为“users”的集合,其中包含为我的应用注册的每个用户。

users
 - Mike
 - David
 - Adam

我还希望在我的聊天应用中拥有一组房间。

rooms
- Game of thrones
- Class of 94'
- sicence fiction
- pet lovers

我也想和用户一起收藏房间

pet lovers (room name) 
- Mike (user1)
- Dave (user2)
.....

我知道如何在 mongodb 中表示用户和房间。

但是知道如何表示“房间中的用户”集合吗?看来我需要一个集合内的列表(房间中的用户列表),此外我还需要保存房间名称。

我希望能够轻松地从该集合中提取数据(即,将用户删除或添加到房间/找出用户正在哪个房间聊天...)

另外,如果有人有更好的建议来表示这些数据 - 请随意...

谢谢

【问题讨论】:

    标签: mongodb mongoose database


    【解决方案1】:

    您可以将包含给定房间中用户 ID 的 users 数组添加到 room 文档,因此房间集合将如下所示:

    [
      {
        "_id":"...",
        "roomName":"Game of Thrones",
        //...
        "users":[
           "userId1",
           "userId2",
           //...
           "userIdn"
        ]
      }, {
        "_id":"...",
        "roomName":"the secret zone",
        //...
        "users":[
           "userId2",
           //...
        ]
      }
    ]
    

    然后,当用户加入房间R 时,您会将他的 ID 添加到 R.users 数组中。并在他离开时将其删除。

    顺便说一句,我认为用mongoose 定义一些模式模型可能会有所帮助

    【讨论】:

    • 我正在使用猫鼬。您能否添加我如何创建您在猫鼬中建议的模型?另外 - 当我想查看每个用户时,这个模型会不会有问题,他在哪个房间聊天?这个怎么查询?
    • 查看本指南Mongoose Schemas,在我建议的实施中,我假设用户一次可以在多个房间中。并且要获取用户登录的房间/房间,而不检查所有房间文档,您可以类似地将rooms 数组添加到UserSchema,当他进入/离开某个房间时您会更新它:)跨度>
    • 谢谢,但这不会是重复的吗?在 2 个不同的集合中保存相同的数据?因为然后我可以通过以下方式获取用户所在的房间:1.检查所有房间和2.检查用户模式以获取特定用户。
    • 是的,它是多余的,但它可能会更快; - 如果你有数百个房间。你想检查他在哪一间,而不是查询所有 100 个房间,你只需检查他的 rooms 数组。 - 如果您有成千上万的用户;您想获取房间中的用户列表(大约十几个),而不是查询每个用户,然后检查他的房间数组,您只需检查房间users
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多