Получить вложенный документ в массиве как DBObject(s)

Я новичок в 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;
}

Я понимаю, что это даст мне весь документ комнаты для имя комнаты, в которую я вхожу. Я немного застрял в том, как лучше всего действовать отсюда, чтобы получить то, что я хочу. Возможно ли то, что я делаю, с помощью простого запроса, или мне придется получить arr ау и перебрать его в коде, приведя элементы как DBObject? Я также открыт для предложений по лучшей структуре документа для моих целей — я никоим образом не женат на этой структуре.

Для небольшого обзора: я довольно хорошо разбираюсь в SQL и традиционных реляционных базах данных, если это поможет с точки зрения пояснительных аналогий. Кроме того, если я искажаю терминологию MongoDB, поправьте меня. Заранее спасибо.

11
задан Parvin Gasimzade 24 August 2012 в 07:49
поделиться