Mongo 行转列和列转行:Java 代码示例及 Groovy 日期操作
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 中,可以直接使用 plus 和 minus 方法对日期进行加减操作。plusHours 表示加上指定小时数,minusMinutes 表示减去指定分钟数,plusDays 表示加上指定天数,minusMonths 表示减去指定月数。
原文地址: https://www.cveoy.top/t/topic/pWPX 著作权归作者所有。请勿转载和采集!