私は MongoDB を初めて使用し、Java ドライバーと一緒に使用しています。私はこの文書構造を持っています:
{ "_id" : ObjectId("4f7d2ba6fd5a306d82687d48"), "room" : "Den" }
{ "_id" : ObjectId("4f7d2baafd5a306d82687d49"), "room" : "Foyer" }
{ "_id" : ObjectId("4f7d2fdcfd5a306d82687d4a"), "room" : "Master Bedroom" }
{ "_id" : ObjectId("4f7d301afd5a306d82687d4b"), "room" : "Guest Bedroom" }
{ "_id" : ObjectId("4f7d2b98fd5a306d82687d47"), "code" : "A", "lights" : [ { "name" : "Overhead", "code" : "1" } ], "room" : "Kitchen" }
私がやりたいことを説明する上で、最後の行が特に興味深いところです。各ドキュメントは部屋であり、サブドキュメントの配列である値に対応する「ライト」キーを持つことができます。モデリングの観点から言えば、家には 0 ~ n 個の部屋があり、各部屋には 0 ~ n 個のライトがあります。Java でやりたいことは、部屋の名前をパラメーターとして取り、ライト配列のサブドキュメントに対応する DBObject のコレクションを返すことです。たとえば、「部屋「キッチン」のすべてのライトを取得します」 .
これまでのところ、TDD スタイルで段階的に進めて、次のクエリを作成しました。
public static final String ROOM_KEY = "room";
public static final String EQUALS_KEY = "$eq";
private BasicDBObject buildRoomNameQuery(String roomName) {
BasicDBObject myQuery = new BasicDBObject();
myQuery.put(ROOM_KEY, new BasicDBObject(EQUALS_KEY, roomName));
return myQuery;
}
これで、渡したルーム名のルーム ドキュメント全体が取得されることに気付きました。ここから先に進む最善の方法は、必要なものを取得することであることに少し行き詰まっています。私がやっていることは単純なクエリでも可能ですか、それとも配列を取得してコードで反復処理し、要素を DBObject としてキャストする必要がありますか? 私はまた、私の目的のためのより良い文書構造についての提案も受け付けています。私は決してこの構造に固執していません。
ちょっとした見方をすると、私は SQL と従来のリレーショナル データベースに非常に精通しています。また、MongoDB の用語を乱用している場合は、訂正してください。前もって感謝します。