java中的mongodb游标映射函数

时间:2014-04-03 21:02:34

标签: mongodb

我有一个集合'展示位置',每个文档都有字段:placement_id,program_id,category,...我需要查找所有具有program_id = 3的展示位置,并且只返回placement_id列表, 我可以从mongo命令行这样做:

db.placements.find({program_id:{$in: [3]}}, {placement_id:1, _id:0}).map( function(doc){return doc.placement_id})

它将placement_ids返回到数组中:

[196, 197, 198...]

但是如何在Java中实现上述查询,我​​检查了mongodb java api的DBCursor类,它没有'map'或'forEach'这样的任何函数。

1 个答案:

答案 0 :(得分:0)

DBCursor.next返回DBOBject,其get方法可用于将值推送到数组。
我在想这样的事情。 (未经测试)

List<Integer> placementIdList = new ArrayList<Integer>();
while (cursor.hasNext()) {
  DBObject obj = cursor.next();
  int id = obj.get("placement_id");
  placementIdList.add(id);
}

更新:
map实现在数据库端的实现与上面非常相似。

mongos> db.test.find().map
function ( func ){
    var a = [];
    while ( this.hasNext() )
        a.push( func( this.next() ) );
    return a;
}

所以你要么在db中,要么在Java层中这样做 在db中执行此操作的优点是在线路上传输更小的数据包(更少的序列化/反序列化成本),而在Java中执行它可以利用JVM的处理能力。