我有以下代码:
CommandResult cr = db.doEval("db." + collectionName + ".aggregate("
+ query + ")");
命令结果是分批给定的,在这里我需要输入单个值。
Batch Result:{ "serverUsed" : "/servername" , "retval" : { **"_firstBatch**" : [ { "visitor_localdate" : 1367260200} , { "visitor_localdate"
预期结果:
{ "serverUsed" : "/servername" , "retval" : { "**result**" : [ { "visitor_localdate" : 1367260200} , { "visitor_localdate"
我们正在使用的Mongo DB是2.6.4(64位)。
有人能帮忙吗?。我猜有一些配置问题。
最佳答案
你做错了一切。您无需为了获得动态集合名称就可以像这样跳过篮球。只需使用以下语法即可:
var collectionName = "collection";
var cursor = db[collectionName].aggregate( pipeline )
其中,
pipeline
也是管道阶段文档的数组,即:var pipeline = [{ "$match": { } }, { "$group": { "_id": "$field" } }];
无论如何,
.aggregate()
方法都会返回一个游标,您可以使用标准方法来迭代结果:while ( cursor.hasNext() ) {
var doc = cursor.next();
// do something with doc
}
但是您实际上是使用Java而不是JavaScript来执行此操作,因此从与对象
db
相连的基本驱动程序中,您可以执行以下操作: DBObject match = new BasicDBObject("$match", new BasicDBObject());
DBObject group = new BasicDBObject("$group", new BasicDBObject());
List pipeline = new ArrayList();
pipeline.add(match);
pipeline.add(group);
AggregationOutput output = db.getCollection("collectionName").aggregate(pipeline);
管道基本上是DBObject信息的列表接口,您可以在其中构造表示所需操作的BSON文档。
此处的结果为
AggregationOutput
,但通过将AggregationOptions
作为pipeline
的附加选项来获得类似游标的结果