0

mongoDBに2つのコレクションがあるとします

学生:

{_id: 1, name: "sa", teachers:[1,2,3]}
{_id: 2, name: "sb", teachers:[1,3]}

教師:

{_id:1, name: "ta"}
{_id:2, name: "tb"}
{_id:3, name: "tc"}

今、私は教師の名前を通して生徒のコレクションを照会したいと思います。このような:

db.students.find({'teachers.name':"ta"}).count()

コレクションをリンクしたり、埋め込んだりできることをどこかで読んだことがあります。それを行う方法はありますか?

私は何を試しましたか?試しdb.students.ensureIndex({'teachers':1})ましたが、動作しません。また、うまくいかないはずだと思います。私はそれを行う方法の手がかりから出ていますか?

重複:似たようなタイトルの投稿がたくさんあることは知っていますが、それでも私は混乱しています!

4

1 に答える 1

1

MongoDB でリレーショナル モデルがどのように行われるかを調べましたか?

ここでensureindexがあなたのために何かをすると思う理由がわかりません。コレクションを「リンク」する方法はありません。MongoDB は非リレーショナル データベースです。現時点では、サブセレクトを使用して 2 つのコレクションを個別にクエリするようにクエリを定義する方法もありません。

ここに埋め込む際の主な問題は、多対多の関係があることです。

  • 学生には多くの教師がいます
  • 先生にはたくさんの生徒がいます

ここで更新すると、パフォーマンスの低いシナリオが作成される可能性があります。

今のところ、私の頭の中で最善の方法は、実際に JOIN クライアント側を次のようにすることです。

var teachers = [];
db.teachers.find({'name':"ta"}).forEach(function(doc){ 
    teachers[teachers.legnth-1] = doc._id; 
});
db.students.find({teachers: {$in: teachers}});
于 2013-02-11T14:22:28.153 に答える