相关请求 MySQL,类似 MongoDB

发布于 2024-10-21 12:32:29 字数 820 浏览 5 评论 0原文

美好的一天,亲爱的同事们,我决定将一些项目从 MySQL 迁移到 MongoDB,并遇到了一些困难:

例如,MySQL 中有两个表:

用户:

CREATE TABLE `testdb`.`users` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 55 ) NOT NULL ,
`password` VARCHAR( 32 ) NOT NULL
) ENGINE = MYISAM

规则:

CREATE TABLE `testdb`.`rules` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`uid` INT NOT NULL ,
`title` VARCHAR( 155 ) NOT NULL ,
`points` INT NOT NULL
) ENGINE = MYISAM 

现在选择所有“规则”,它们属于我可以创建的特定用户SQL请求:

SELECT r.`title`, r.`points` FROM `rules` r, `users` u WHERE r.`uid` = u.`id` AND u.`id` = '123'

到目前为止,我不知道如何在MongoDB中做同样的事情,你能解释一下并提供一个例子吗?

PS我在pymongo的帮助下用Python实现 PPS 我还想看看在 ORM mongoengine 或 mongokit 的帮助下解决这个问题的替代方法。

先感谢您:)

Good day dear colleagues, I decided to move some projects from MySQL to MongoDB and faced several difficulties:

For example there are two tables in MySQL:

Users:

CREATE TABLE `testdb`.`users` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 55 ) NOT NULL ,
`password` VARCHAR( 32 ) NOT NULL
) ENGINE = MYISAM

Rules:

CREATE TABLE `testdb`.`rules` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`uid` INT NOT NULL ,
`title` VARCHAR( 155 ) NOT NULL ,
`points` INT NOT NULL
) ENGINE = MYISAM 

Now to chose all "rules", which belong to a paticular user I can make SQL request:

SELECT r.`title`, r.`points` FROM `rules` r, `users` u WHERE r.`uid` = u.`id` AND u.`id` = '123'

By now, I can't figure out how to do the same in MongoDB, can you please explain and provide an example.

P.S. I make implementation in Python with the help of pymongo
P.P.S. I also wanted to see the alternative ways of solving this problem with the help of ORM mongoengine or mongokit.

Thank you in advance:)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

兔姬 2024-10-28 12:32:29

与 MySQL 等 RDBMS 不同,MongoDB 不支持连接。这是因为 MongoDB 不是关系数据库。因此,在 MongoDB 中以与在 RDBMS 中相同的方式对数据进行建模通常是一个坏主意 - 您必须以完全不同的思维方式设计模式。

例如,在这种情况下,在 MongoDB 中,每个用户可以有 1 个文档,每个用户的规则都嵌套在其中。

例如

{
    "ID" : 1,
    "name" : "John",
    "password" : "eek hope this is secure",
    "rules": [
        {
            "ID" : 1,
            "Title" : "Rule 1",
            "Points" : 100   
        },
        {
            "ID" : 2,
            "Title" : "Rule 2",
            "Points" : 200
        }
    ]
}

,这意味着,您只需要一次读取即可拉回用户及其所有规则。

一个很好的起点是 Mongodb.org 关于 架构设计 的参考 - 我的内容我上面讲的是嵌入对象。

MongoDB does not support joins, unlike RDBMS's like mysql. And that's because MongoDB is not a relational database. Modelling data in MongoDB in the same way as you do in an RDBMS is therefore generally a bad idea - you have to design your schemas in a whole different mindset.

In this case for example, in MongoDB you could have 1 document per User, with the Rules belonging each user nested inside.

e.g.

{
    "ID" : 1,
    "name" : "John",
    "password" : "eek hope this is secure",
    "rules": [
        {
            "ID" : 1,
            "Title" : "Rule 1",
            "Points" : 100   
        },
        {
            "ID" : 2,
            "Title" : "Rule 2",
            "Points" : 200
        }
    ]
}

This means, you only need a single read to pull back a user and all their rules.

A good starting point is the Mongodb.org reference on Schema Design - what I'm talking about above is embedding objects.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文