我正在尝试将此JavaScript代码转换为要在Spring Data中使用的Java代码:

proj3={"$project": {
        "comms" : 1,
        "same" : { "$eq" : ["$comms.i" , "$max"]},
    "max" : 1,
    "_id" : 1
     }
};


我似乎无法弄清楚。

我已经试过了:

    BasicDBObject o3 = new BasicDBObject();
    o3.append("$eq", "[\"$comms.i\",\"$max\"]");
    Aggregation aggCount2 = newAggregation(project("comms", "max", "_id").andExpression("same", o3));
    logger.info(aggCount2.toString());


这是记录的内容:

{ "$project" : { "comms" : 1 , "max" : 1 , "_id" : 1}}


我也阅读了这个线程:Spring Data MongoDB - $eq within $project support,但是发帖者似乎已经放弃了,而是使用了executeCommand选项,这不是我想走的路线。

如何在Java Spring Data Mongodb中使用此代码?

最佳答案

这就是我解决的方法,它可能不是最有效的方法,但是它似乎不需要重写太多代码就可以工作。

首先,我看了这个线程的答案:
Aggregation Project Group By extracted day, month and year with Spring Data

布雷克斯七世(Blakes Seven)提议我使用特殊的自定义aggregationOperation类,以便聚合代码将使用BasicDBObjects:

public class CustomGroupOperation implements AggregationOperation {
    private DBObject operation;

    public CustomGroupOperation (DBObject operation) {
        this.operation = operation;
    }

    @Override
    public DBObject toDBObject(AggregationOperationContext context) {
        return context.getMappedObject(operation);
    }
}


接下来,只需将所需的项目代码格式化为BasicDBObject:

BasicDBList basicDBList = new BasicDBList();
basicDBList.add("$comms.i");
basicDBList.add("$max");

Aggregation aggCount2 = newAggregation(
        match(),
        project(),
        group(),
        new CustomGroupOperation(new BasicDBObject("$project",
                new BasicDBObject("comms", 1)
                        .append("max", 1)
                        .append("_id", 1)
                        .append("same", new BasicDBObject("$eq", basicDBList)))),
        match(),
        project(),
        group(),
        sort());


在记录器中将其打印出来,您将看到javascript代码的格式现在是正确的。

{ "$project" : { "comms" : 1 , "max" : 1 , "_id" : 1 , "same" : { "$eq" : [ "$comms.i" , "$max"]}}}

关于java - Spring Data MongoDB:如何在项目聚合查询中表示$ eq?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37643101/

10-10 18:16
查看更多