java—如何使用spring框架聚合返回包含不同值的完整文档?

nszi6y05  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(351)

假设我有这样的文件:

{
   "name" : "Wendy",
   "phone" : "123",
   "GroupId" : 1
}, 
{
   "name" : "Tom",
   "phone" : "234",
   "GroupId" : 1
},
{
   "name" : "Sally",
   "phone" : "345",
   "GroupId" : 3
},
{
   "name" : "Bob",
   "phone" : "456",
   "GroupId" : 3
},
{
   "name" : "Cortana",
   "phone" : "567",
   "GroupId" : 7
}

我想返回一个完整数据文档的列表,其中包含每个不同的 GroupId . 我认为聚合是完成此类任务的最佳途径。到目前为止,我掌握的情况如下:

MatchOperation matchStage = Aggregation.match(new Criteria());
GroupOperation groupStage = Aggregation.group("GroupId").first("$$CURRENT").as("??");
// I know the above line is semi-nonsensical

Aggregation aggregation = Aggregation.newAggregation(matchStage, groupStage);

// I only need help creating the aggregation object, beyond this is just a MongoOperations aggregate call

需要注意的是,我不一定需要使用聚合,所以如果有一种方法可以使用简单的“find”来实现这一点,那么我可以接受。我是mongodb noob,抱歉,如果我的“have trued”部分不是很有用。然而,这正是我想要的:

{
   "name" : "Wendy",
   "phone" : "123",
   "GroupId" : 1
}, 
{
   "name" : "Sally",
   "phone" : "345",
   "GroupId" : 3
},
{
   "name" : "Cortana",
   "phone" : "567",
   "GroupId" : 7
}
mdfafbf1

mdfafbf11#

试试这个。 $first 有助于获取数据的第一次出现

Aggregation aggregation = Aggregation.newAggregation(
    group("GroupId")
        .first("name").as("name")
        .first("GroupId").as("GroupId")
        .first("phone").as("pnone"),
    project().andExclude("_id")
).withOptions(AggregationOptions.builder().allowDiskUse(Boolean.TRUE).build());

return mongoTemplate.aggregate(aggregation, mongoTemplate.getCollectionName(YOUR_COLLECTION_NAME.class), Object.class).getMappedResults();

工作蒙哥Playground

相关问题