【发布时间】:2012-01-22 00:11:46
【问题描述】:
您好,我在 mongodb 中遇到了一些问题。用 java 读取文档是没有问题的,但是读取文档中的数组是一个问题。假设我有一个集合 myCol:
{"name": "lenny linux", "gender": "m", "computers": [{"name": "computer"}, {"name": "computer2"} {"name"...}]}
所以有一个带有计算机的阵列。我可以阅读整个文档
DBCollection myCol = getCollection(...);
BasicDBObject query = new BasicDBObject();
query.put(name, "lenny linux");
DBCursor cursor = myCol.find(query);
while (cursor.hasNext()) {
System.out.print(cursor.next());
}
但我只需要计算机的名称,所以我必须以某种方式读取数组。不要在 mongodb 中获取这个数组的东西。如果我想从 mongodb 数组中删除一些东西怎么办?它与删除普通文档不同...谢谢您的帮助!
编辑:如果我正在阅读 mongodb 页面:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray 我真的不明白。他们有一系列颜色,然后他们像这样读取红色:
db.things.find({ colors :"red" });
我为什么要这样做?如果我想读取数组以了解数组内部的内容。用户不知道有“红色”或蓝色或其他。也许数组颜色是空的?然后我返回一个空值、0 或其他任何值,如果有 4 种颜色,那么给我这些颜色,打印出来。我没有任何其他的例子......我很抱歉我的英语不好。
编辑2: 好的,所以对我来说新的解决方案是获取 name == lenny linux 的整个文档(就像我的代码中的第一次一样),然后使用像 json-simple 这样的外部 JSON 解析器解析这个文档。好吧,也许那不是最好的解决方案,因为最好的解决方案是在没有其他库的情况下仅使用 mongolib 来获取数组中的内容...但是可以正常工作:) 如果有人知道更简单的方法,只需将其发布在这里。谢谢。
【问题讨论】:
-
如果我这样做,我会取回包含 id、name、gender 和所有内容的整个文档。但我只想获取数组中的名称。所以 System.out.print(myFunctionToReadComputersFrom("lenny linux") 应该打印出:computer, computer2, ...
-
这就是 mongodb 的工作原理,它存储文档并让您查询文档。如果您想从文档中获取一条信息,则必须将其提取出来。
-
所以我得到了一个很大的文档,因为我只需要数组部分,所以我必须构建一个正则表达式(或其他东西?)来获取数组中的内容?
-
您不必获取整个文档,您可以有选择地选择要返回的字段。请记住,您是决定文档架构的人,那么如果您只需要一两个字段,为什么还要创建一个巨大的文档呢?
-
挑选字段?我想我错过了一些东西,你能举个例子吗? ^^