在mongodb中读取数组?
嗨我在mongodb中的数组有些麻烦。 使用java读取文档没有问题,但是读取数组文档中的内容是个问题。 可以说我有一个集合myCol:
{"name": "lenny linux", "gender": "m", "computers": [{"name": "computer"}, {"name": "computer2"} {"name"...}]}
所以有一个带计算机的arrays。 我可以阅读整个文件
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种颜色然后给我这些颜色,打印出来。 我没有其他任何例子……对不起我的英语不好。
Edit2:好的,所以对我来说新的解决方案是将整个文档放在name == lenny linux中(就像我第一次在我的代码中),然后使用像json-simple这样的extern JSON解析器来解析这个文档。 好吧也许这不是最好的解决方案,因为最好的解决方案是在没有其他库只使用mongolib的情况下获取数组中的东西……但是确定它的工作:)如果有人知道更简单的方法就在这里发布它。 谢谢。
如果我想从mongodb数组中删除一些内容呢? 它与删除普通文件不同。
http://www.mongodb.org/display/DOCS/Updating解释了两种方式:
-
$ set:用新的数组替换当前数组(获取前一个数组,删除一个或两个元素,并用$ set更新)
-
db.users.update({name : "lenny linux"}, {$pull : { computers : { name : "computer2" } }}, false, false)
从name
“computer2”的arrayscomputers
中删除所有元素。
当使用对象(命名元素)到达数组时,您希望使用点符号到达数组。
db.myColl.find({'computers.name':'computer'});
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray
至于从数组中删除项目,您想要查看$pop
和$pull
更新函数
因为我在Java中处理这个问题,而你的代码是用Java编写的,所以这里是java中的解决方案。
基本上当你get(key)
一个MongoDB数组时,它会返回一个com.mongodb.BasicDBList
对象,你可以得到它的迭代器。
在我的代码中,我查询如下所示的文档:
{ "_id": ObjectID("52d60db91f3aa664410bcde5"), "owner": "Amy", "trusted": [ "amy", "paul", "randy" ] }
当我需要找到这个文档的可信人员时,我使用((BasicDBList) doc.get("trusted")).listIterator();
DBObject doc = collection.findOne(new BasicDBObject("owner", "Amy")) ListIterator
我使用一些System.out.println(Object.getClass())
来解决这个问题,以了解我需要构建哪些类。
他问的问题是如何返回存储在Mongo集合中的数组中找到的所有元素,而不知道这些元素的确切数量或数量。 您没有针对已知值执行查询,而只是要求转储Mongo数组中的内容。 例如,如果您的Mongo数组名称是“colors”,则只需执行以下操作:
@colors = @ {$ record – > {colors}};
现在你拥有Perl数组中的所有颜色供你玩。
请享用!