3

タイトルがどれだけ説明的かわからないので、理解を深めるために自由に変更してください。

私は MongoDB を初めて使用しますが、これまでのところ順調に進んでいます。ただし、他のコレクションのドキュメントを他のコレクションのドキュメントに結合/マップする必要があるという非常に基本的な問題に遭遇しました。

簡単に言えば、次の構造があります。

コレクション「メンバー」

{
  "_id": "abc",
  "name": "Mr. Abc"
}


{
  "_id": "def",
  "name": "Mrs. Def"
}

コレクション「最近」 :

[{
  "_id": "123",
  "member_id": "abc",
  "action": "joined"
},
  "_id": "456",
  "member_id": "def",
  "action": "left"
}]

ここで、「最近」を繰り返し処理し、すべてのメンバーをオブジェクト「メンバー」としてドキュメントにマップします。

Monk ( https://github.com/LearnBoost/monk ) を MongoDB の API として使用していますが、解決策が見つかりませんでした。

これまでのところ、.forEach() で繰り返し、「メンバー」から「最近」までのすべての結果を追加しようとしました。ただし、クエリは非同期であるため、すべてのドキュメントを返すコールバックで機能させることはできません。

カーソルなどについて何か読んだのですが、実行可能な解決策が見つかりませんでした。だから私はあなたにお願いしています。

4

1 に答える 1

2

Mongo は非リレーショナルであるため、結合はありません

2 つのクエリ:

var recent = db.recent.findOne({"id" : "123"})
db.member.find( {"id" : {$in : recent.member_id }});

次に、 http://blog.modulus.io/getting-started-with-mongooseのようなORMを使用するのはあなた次第です

ForEach ベースのアプローチでは、既に述べたように、クライアント側のロードについて説明しています。

    db.recent.find().forEach(
        function (rece) {
            rece.member = db.member.find( {"id" : {$in : rece.member_id }});
            db.recentMembers.insert(rece);
        }
    );

db.recentMembers.find().pretty()
于 2014-06-01T20:08:43.340 に答える