Mongo 实现行转列和列转行效果:Java 代码演示

要实现行转列和列转行效果,可以使用 Mongo 的聚合管道操作。

行转列可以使用 $group$push 操作符来实现。$group 操作符可以按照指定的字段进行分组,$push 操作符可以将分组后的结果保存在一个数组中。

列转行可以使用 $unwind 操作符来实现。$unwind 操作符可以将一个数组拆分成多个文档。

以下是 Java 代码示例:

import com.mongodb.MongoClient;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase database = mongoClient.getDatabase("test");
        MongoCollection<Document> collection = database.getCollection("data");

        // 行转列
        List<Document> pipeline1 = Arrays.asList(
                new Document("$group", new Document("_id", "$name")
                        .append("values", new Document("$push", "$value")))
        );

        AggregateIterable<Document> result1 = collection.aggregate(pipeline1);
        for (Document document : result1) {
            System.out.println(document.toJson());
        }

        // 列转行
        List<Document> pipeline2 = Arrays.asList(
                new Document("$unwind", "$values")
        );

        AggregateIterable<Document> result2 = collection.aggregate(pipeline2);
        for (Document document : result2) {
            System.out.println(document.toJson());
        }

        mongoClient.close();
    }
}

示例数据:

[
    {
        "name": "A",
        "value": 1
    },
    {
        "name": "A",
        "value": 2
    },
    {
        "name": "B",
        "value": 3
    },
    {
        "name": "B",
        "value": 4
    }
]

输出结果:

行转列:

{ "_id" : "B", "values" : [ 3, 4 ] }
{ "_id" : "A", "values" : [ 1, 2 ] }

列转行:

{ "_id" : "B", "values" : 3 }
{ "_id" : "B", "values" : 4 }
{ "_id" : "A", "values" : 1 }
{ "_id" : "A", "values" : 2 }

Groovy 如何使用自身风格代码对日期进行加减

Groovy 内置了一些方便的日期操作方法,可以直接对日期进行加减操作。

以下是 Groovy 代码示例:

import java.time.LocalDateTime

def now = LocalDateTime.now()

def oneHourLater = now.plusHours(1)
def oneMinuteEarlier = now.minusMinutes(1)
def oneDayLater = now.plusDays(1)
def oneMonthEarlier = now.minusMonths(1)

println 'Now: $now'
println 'One hour later: $oneHourLater'
println 'One minute earlier: $oneMinuteEarlier'
println 'One day later: $oneDayLater'
println 'One month earlier: $oneMonthEarlier'

输出结果:

Now: 2022-01-01T12:00:00.000
One hour later: 2022-01-01T13:00:00.000
One minute earlier: 2022-01-01T11:59:00.000
One day later: 2022-01-02T12:00:00.000
One month earlier: 2021-12-01T12:00:00.000

在 Groovy 中,可以直接使用 plusminus 方法对日期进行加减操作。plusHours 表示加上指定小时数,minusMinutes 表示减去指定分钟数,plusDays 表示加上指定天数,minusMonths 表示减去指定月数。


原文地址: https://www.cveoy.top/t/topic/pWPX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录