首页 > 解决方案 > Mongo DB查询的等效JAVA Spring Boot代码是什么

问题描述

我已经编写了 MongoDB 查询以显示上周用户数,基于 Profile 集合中的 lastActive 字段,lastActive 字段是日期字符串。有人可以帮我使用 SimpleDateFormat 类或 LocalDate 类编写相应的 Spring Boot java 代码。请

var today = new Date();
var lastWeekStart = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7);
var lastWeekEnd = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 7);
var start = new Date(lastWeekStart.setHours(0,0,0,0));
var end = new Date(lastWeekEnd.setHours(23,59,59,999));

db.Profile.aggregate([
{
    "$group": {
        "_id": null,
        "total": { "$sum": 1 },
        "LastWeekUsersList": {
            "$sum": {
                "$cond": [
                    { 
                        "$and": [
                            { "$gte": [ "$lastActive", start ] },
                            { "$lte": [ "$lastActive", end ] }
                        ]
                    },
                    1,
                    0
                ]
            }
        }
    }
}
])

这个怎么写对应的spring boot代码,不知道怎么写mongo db的java等价查询,求大神帮忙

标签: javamongodbspring-bootaggregation-frameworkmongotemplate

解决方案


你可以尝试这样的事情(未经测试)

    @Autowired
    private MongoOperations mongoOperations;

    public MongoOperations getMongoOperations() {
        return mongoOperations;
    } 
   .... 
    Instant start = Instant.parse("2020-07-13T10:30:00.000Z");
    Instant end = Instant.parse("2020-07-20T10:37:00.000Z");
    Criteria criteria = new Criteria().andOperator(
        Criteria.where("lastActive").gt(start),
        Criteria.where("lastActive").lt(end)
    );
    ConditionalOperators.Cond sumCond = ConditionalOperators.when(criteria).then(true).otherwise(false);
    GroupOperation groupOperation = Aggregation.group().count().as("total").sum(sumCond).as("LastWeekUsersList");
    List<MappedType> mappeRes = getMongoOperations().aggregate(Aggregation.newAggregation(
        groupOperation
    ), "myCollecgtion", MappedType.class).getMappedResults();

推荐阅读