MongoDBでは、このようにすることができます。私は、インタラクティブJavaScriptシェルを使用します。
まず、いくつかのユーザーを作成します。
> db.so.employee.insert({name: "Joe"})
> db.so.employee.insert({name: "Moe"})
> db.so.employee.insert({name: "Bart"})
> db.so.employee.insert({name: "Homer"})
> db.so.employee.find()
{ "_id" : ObjectId("4de35ccbcc0379536e1ac43b"), "name" : "Joe" }
{ "_id" : ObjectId("4de35ccfcc0379536e1ac43c"), "name" : "Moe" }
{ "_id" : ObjectId("4de35cd3cc0379536e1ac43d"), "name" : "Bart" }
{ "_id" : ObjectId("4de35cd7cc0379536e1ac43e"), "name" : "Homer" }
を今すぐ
> db.so.project.insert({name: "Web App A"})
> db.so.project.insert({name: "Web App B"})
> db.so.project.insert({name: "Web App C"})
> db.so.project.find();
{ "_id" : ObjectId("4de35d0fcc0379536e1ac43f"), "name" : "Web App A" }
{ "_id" : ObjectId("4de35d13cc0379536e1ac440"), "name" : "Web App B" }
{ "_id" : ObjectId("4de35d15cc0379536e1ac441"), "name" : "Web App C" }
プロジェクトにユーザーを追加し、いくつかのプロジェクトを作成するには、今すぐにすべてのプロジェクトを検索したい場合は
> db.so.project.update({name: "Web App A"}, {$push: {employees: ObjectId('4de35ccbcc0379536e1ac43b') }})
> db.so.project.update({name: "Web App A"}, {$push: {employees: ObjectId('4de35ccfcc0379536e1ac43c') }})
> db.so.project.update({name: "Web App B"}, {$push: {employees: ObjectId('4de35ccfcc0379536e1ac43c') }})
> db.so.project.update({name: "Web App C"}, {$push: {employees: ObjectId('4de35ccfcc0379536e1ac43c') }})
> db.so.project.update({name: "Web App B"}, {$push: {employees: ObjectId('4de35cd3cc0379536e1ac43d') }})
> db.so.project.update({name: "Web App C"}, {$push: {employees: ObjectId('4de35cd3cc0379536e1ac43d') }})
> db.so.project.update({name: "Web App B"}, {$push: {employees: ObjectId('4de35cd7cc0379536e1ac43e') }})
> db.so.project.find()
{ "_id" : ObjectId("4de35d0fcc0379536e1ac43f"), "employees" : [
ObjectId("4de35ccbcc0379536e1ac43b"),
ObjectId("4de35ccfcc0379536e1ac43c")
], "name" : "Web App A" }
{ "_id" : ObjectId("4de35d15cc0379536e1ac441"), "employees" : [
ObjectId("4de35ccfcc0379536e1ac43c"),
ObjectId("4de35cd3cc0379536e1ac43d")
], "name" : "Web App C" }
{ "_id" : ObjectId("4de35d13cc0379536e1ac440"), "employees" : [
ObjectId("4de35cd3cc0379536e1ac43d"),
ObjectId("4de35cd7cc0379536e1ac43e")
], "name" : "Web App B" }
作品 "ジョー"
> db.so.project.find({employees: ObjectId('4de35ccbcc0379536e1ac43b') }, {name: 1})
{ "_id" : ObjectId("4de35d0fcc0379536e1ac43f"), "name" : "Web App A" }
はジョーと萌えはあなたが2つのクエリを必要とする特定のプロジェクトのためのすべてのemployessを取得するには
> db.so.project.find({employees: {$all: [ObjectId('4de35ccbcc0379536e1ac43b'), ObjectId('4de35ccfcc0379536e1ac43c')] }}, {name: 1})
{ "_id" : ObjectId("4de35d0fcc0379536e1ac43f"), "name" : "Web App A" }
を働く上ですべてのプロジェクトを検索ジョーOR萌え
> db.so.project.find({employees: {$in: [ObjectId('4de35ccbcc0379536e1ac43b'), ObjectId('4de35ccfcc0379536e1ac43c')] }}, {name: 1})
{ "_id" : ObjectId("4de35d0fcc0379536e1ac43f"), "name" : "Web App A" }
{ "_id" : ObjectId("4de35d15cc0379536e1ac441"), "name" : "Web App C" }
{ "_id" : ObjectId("4de35d13cc0379536e1ac440"), "name" : "Web App B" }
を働く上ですべてのプロジェクトを検索します。私はMongoDBの仕組みを理解するのに役立っていることを期待
> db.so.employee.find({_id: {$in: [ObjectId('4de35ccfcc0379536e1ac43c'), ObjectId('4de35cd3cc0379536e1ac43d')] }})
{ "_id" : ObjectId("4de35ccfcc0379536e1ac43c"), "name" : "Moe" }
{ "_id" : ObjectId("4de35cd3cc0379536e1ac43d"), "name" : "Bart" }
と:あなたが戻っ値と ビルドこのクエリから新しいクエリを作成し、あなたのAppllicationで プロジェクトC.からすべての従業員
> db.so.project.find({name: "Web App C"}, {employees: 1})
{ "_id" : ObjectId("4de35d15cc0379536e1ac441"), "employees" : [
ObjectId("4de35ccfcc0379536e1ac43c"),
ObjectId("4de35cd3cc0379536e1ac43d")
] }
を検索どのように関係を構築することができます。ここではマニュアル逆参照を使用しました。つまり、ObjectIDを直接保存し、手動で取得します。また、 "DBRef"が存在し、ドライバがそれを取得します。
ご回答ありがとうございます。しかし、私はこの種の構造を問い合わせることができるドキュメントモデルを見つけ出すのに苦労しています。何か案は? –
私は主なエンティティを選択する必要があると思いますが、私はあなたのアプリケーションについて何も知らないので、私はそれを手伝うことはできません。システムをユーザの周りに集中させ、プロジェクトを比較的シンプルにしたり、ユーザのプロジェクトをラップしたり、その逆もあります。ユーザーとプロジェクトが同じように重要な場合は、ユーザーのデータの一部をプロジェクト/割り当てドキュメントに含めて、結合サンプルをフェッチするだけで十分です(2つのドキュメントを変更する必要があるという欠点があります)。最後に、ユーザーIDをプロジェクトに含めることができます。これは結合になります。 –
PSの割り当ては、アプリケーションによっては、ユーザーまたはプロジェクトにマージする必要があります。 –