我对 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中做的是将房间的名称作为参数,并返回一个与lights数组中的子文档相对应的DBObject集合--“get me all lights for room 'kitchen'”,例如.
到目前为止,以 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 术语,请纠正我。提前致谢。