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 PPS 的帮助下在 Python 中实现我还想看看在 ORM mongoengine 或 mongokit 的帮助下解决这个问题的替代方法。

先感谢您:)

4

1 回答 1

2

MongoDB 不支持连接,这与 RDBMS 的 mysql 不同。那是因为 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 对Schema Design的参考——我上面所说的是嵌入对象。

于 2011-03-10T10:30:00.730 回答