2

我有用户表,如:

{ _id: kshjfhsf098767, email: email@something name: John joshua }
{ _id: dleoireofd9888, email: email@hhh name: Terry Holdman }

我还有其他收藏“游戏”

{_id: gsgrfsdgf8898, home_user_id: kshjfhsf098767, guest_user_id: dleoireofd9888, result: "0:1"}

然后我想要加入(就像在 mysql 中一样),与用户进行两次游戏,因为我知道 home_user_id 和 guest_user_id 并使用姓名电子邮件等。我可以将所有这些放在桌面游戏中,但这将是重复的内容。如果他们更改名称或电子邮件,我需要更新整个游戏桌......

任何有关设计和查询的帮助,以便与正在玩游戏的两个用户一起调用该游戏会很棒...... Tnx

4

2 回答 2

1

有两种方法来管理它,手动或使用DBRef。从前面的文档链接:

MongoDB 不支持连接。在 MongoDB 中,一些数据被“非规范化”,或者与相关数据一起存储在文档中,以消除对连接的需要。但是,在某些情况下,将相关信息存储在单独的文档中是有意义的,通常是在不同的集合或数据库中。

所以这是一个自己管理链接或使用内置DBRef的情况。对于 DBRef 案例,请参阅如何使用 DBRef 查询 mongodb

或者,使用不同的模式设计可能更容易管理。例如,游戏集合可以只存储resultgame_id,而是添加game_id对每个相关用户的引用。当然,您仍然需要查询这两个集合,并且链接的 SO 问题有一个如何执行此操作的示例。

于 2012-10-28T09:36:03.737 回答
0

MongoDB 没有 JOIN (NoSQL)。

只需在此处进行惰性连接,您可以在其中查询用户行,然后查询该用户参与的所有游戏。使用正确的索引将是超快的,因为命令将是两个小命令,MongoDB 几乎不会注意到它们。

我不建议在这里嵌入。以您所说的原因为例,这将使数据难以在可能位于单个游戏“房间”中的 100 名用户中更新。在这种情况下,最好进行一次原子更新,即使这意味着您必须在查询另一个集合时增加一些开销。

于 2012-10-28T09:24:18.350 回答