如何在Spring数据Mongodb中使用ArrayOperation的大小class进行聚合?
How to use Size class of ArrayOperation for Aggregation in Spring data Mongodb?
{
"_id" : ObjectId("5b4d975be2194da53a85e69f"),
"ISBN" : 2,
"book_title" : "ZERO TO ONE",
"author_name" : "Peter Theil",
"publisher" : "Penguin",
"status" : "ISSUED",
"issued" : [
{
"member_name" : "suresh",
"member_id" : 101,
"from_date" : "1/01/2018",
"to_date" : "15/02/2018"
},
{
"member_name" : "Jay",
"member_id" : 103,
"from_date" : "16/02/2018",
"to_date" : "30/03/2018"
}
]}
这是我的Mongodb文档format.What我想做的是计算每个文档发出的数组长度。所以我的输出将是 Count:2 这个文档。我想用 spring 数据 mongodb 来实现这个。我参考了那里的文档,发现在 ArrayOperators class Link 中有一个 Size class 在这里:
Spring data mongodb Documentaion
但我不知道使用大小 class ???
Mongodb终端查询为:
db.library.aggregate([{$project:{count:{$size:"$issued"},"book_title":1,"_id":0}])
您可以尝试以下聚合。
使用 ArrayOperators
ProjectionOperation project = Aggregation.
project("book_title").
andExclude("_id").
and(ArrayOperators.arrayOf("issued").length()).as("count");
使用大小辅助方法
ProjectionOperation project = Aggregation.
project("book_title").
andExclude("_id").
and("issued").size().as("count");
聚合的其余部分
Aggregation aggregation = Aggregation.newAggregation(project);
List<Document> results = mongoTemplate.aggregate(aggregation, "library", Document.class).getMappedResults();
{
"_id" : ObjectId("5b4d975be2194da53a85e69f"),
"ISBN" : 2,
"book_title" : "ZERO TO ONE",
"author_name" : "Peter Theil",
"publisher" : "Penguin",
"status" : "ISSUED",
"issued" : [
{
"member_name" : "suresh",
"member_id" : 101,
"from_date" : "1/01/2018",
"to_date" : "15/02/2018"
},
{
"member_name" : "Jay",
"member_id" : 103,
"from_date" : "16/02/2018",
"to_date" : "30/03/2018"
}
]}
这是我的Mongodb文档format.What我想做的是计算每个文档发出的数组长度。所以我的输出将是 Count:2 这个文档。我想用 spring 数据 mongodb 来实现这个。我参考了那里的文档,发现在 ArrayOperators class Link 中有一个 Size class 在这里:
Spring data mongodb Documentaion
但我不知道使用大小 class ???
Mongodb终端查询为:
db.library.aggregate([{$project:{count:{$size:"$issued"},"book_title":1,"_id":0}])
您可以尝试以下聚合。
使用 ArrayOperators
ProjectionOperation project = Aggregation.
project("book_title").
andExclude("_id").
and(ArrayOperators.arrayOf("issued").length()).as("count");
使用大小辅助方法
ProjectionOperation project = Aggregation.
project("book_title").
andExclude("_id").
and("issued").size().as("count");
聚合的其余部分
Aggregation aggregation = Aggregation.newAggregation(project);
List<Document> results = mongoTemplate.aggregate(aggregation, "library", Document.class).getMappedResults();