我有一个集合'展示位置',每个文档都有字段: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'这样的任何函数。
答案 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的处理能力。