我有以下代码:

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的附加选项来获得类似游标的结果

10-04 20:03