gpt4 book ai didi

performance - Mongodb 多重查询或数据库规范化

转载 作者:可可西里 更新时间:2023-11-01 10:35:24 25 4
gpt4 key购买 nike

我正在为我的数据库使用 MongoDB。我目前正在处理的查询揭示了我的架构中可能存在的缺陷。以下是我收藏的相关布局。 请注意,games.players 是一个包含 2 个玩家的数组,因为游戏是国际象棋。

users {_id, username, ...}
games {_id, players[], ...}
msgs {_id, username, gameid, time, msg}

我需要的数据是:

All msgs for games which a user is in which is newer than a given timestamp.

在 SQL 数据库中,我的查询类似于:

SELECT * FROM msgs WHERE time>=$time AND gameid IN
(SELECT _id FROM games WHERE players=$username);

但是,Mongo 不是关系数据库,因此不支持子查询或连接。我看到两种可能的解决方案。 什么在性能和效率方面更好?

  1. 多个查询
    • 选择用户所在的游戏,然后使用 $in 匹配 msgs.gameid。
    • 其他?
  2. 规范化
    • 让 users.games 包含用户所在的所有游戏。
    • 通过 msgs.gameid 将 games.players 复制到 msgs.players
    • 等等,

最佳答案

我是 MongoDB 的新手,但我发现自己经常结合使用这两种方法。有些东西 - 例如用户名 - 经常重复以简化用于显示的查询,但任何时候我需要做的不仅仅是显示信息,我最终会编写多个查询,有时是 2 或 3 级深,使用 $in 来收集我需要的所有文档用于给定操作。

关于performance - Mongodb 多重查询或数据库规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7395256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com