0

親愛なる同僚の皆さん、こんにちは。いくつかのプロジェクトを MySQL から MongoDB に移行することにしましたが、いくつかの問題に直面しました。

たとえば、MySQL には 2 つのテーブルがあります。

ユーザー:

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

mysql のような RDBMS とは異なり、MongoDB は結合をサポートしていません。それは、MongoDB がリレーショナル データベースではないためです。したがって、RDBMS で行うのと同じ方法で MongoDB でデータをモデル化することは、一般的に悪い考えです。まったく異なる考え方でスキーマを設計する必要があります。

たとえばこの場合、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
        }
    ]
}

つまり、ユーザーとそのすべてのルールを取得するには、1 回の読み取りのみが必要です。

出発点としては、スキーマ設計に関する Mongodb.org リファレンスを参照してください。上記で説明しているのは、オブジェクトの埋め込みです。

于 2011-03-10T10:30:00.730 に答える