Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb方案数据库设计_Mongodb_Mongodb Query - Fatal编程技术网

mongodb方案数据库设计

mongodb方案数据库设计,mongodb,mongodb-query,Mongodb,Mongodb Query,我的用户表如下所示: { _id: kshjfhsf098767, email: email@something name: John joshua } { _id: dleoireofd9888, email: email@hhh name: Terry Holdman } 我还有其他系列“游戏” 然后我想加入(就像在mysql中一样),和用户玩两次游戏,因为我知道home\u user\u id和guest\u user\u id,还知道姓名email等等。 我可以把所有这些都放在桌面游戏

我的用户表如下所示:

{ _id: kshjfhsf098767, email: email@something name: John joshua }
{ _id: dleoireofd9888, email: email@hhh name: Terry Holdman }
我还有其他系列“游戏”

然后我想加入(就像在mysql中一样),和用户玩两次游戏,因为我知道home\u user\u id和guest\u user\u id,还知道姓名email等等。 我可以把所有这些都放在桌面游戏中,但这将是重复的内容。如果他们更改了名字或电子邮件,我需要更新整个游戏表

如果有两个用户正在玩游戏,那么在设计和查询方面有任何帮助来调用该游戏将非常好……Tnx

MongoDB没有连接(NoSQL)

只需在这里做一个惰性连接,查询用户行,然后查询该用户参与的所有游戏。有了正确的索引,速度会非常快,因为命令是两个小的,MongoDB几乎不会注意到它们


我不建议在这里嵌入。例如,以您陈述的原因为例,这将使数据在100多个可能在单个游戏“房间”中的用户中更新成为一件痛苦的事情。在这种情况下,最好只进行一次原子更新,即使这意味着您必须在查询另一个集合时增加一点开销。

有两种方法来管理此操作,手动或使用原子更新。从前面的文档链接:

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

因此,您可以自己管理链接或使用内置的DBRef。有关DBRef案例,请参见


或者,使用不同的模式设计可能更容易管理。例如,游戏集合可以只存储
结果
游戏id
,而是将
游戏id
引用添加到每个相关用户。当然,您仍然需要同时查询集合和链接的问题,因此问题中有一个示例说明如何执行此操作。

应该明确的是,由于MongoDB没有连接,您实际上无法跨DBRef进行查询,您只能查询链接答案中所示的同一文档中的字段/子文档。实际上,您将DBRefs客户端与一个类似于
getConnected()
的函数一起使用,该函数返回相关行。注意:聚合框架的某些区域不支持DBREF,它会给本来只是
ObjectId()
的对象增加额外的开销,如果您不知道连接的表,最好将其用于自描述
\u id
s。
{_id: gsgrfsdgf8898, home_user_id: kshjfhsf098767, guest_user_id: dleoireofd9888, result: "0:1"}