Spring MongoDB distict - 无法获取完整文档

时间:2016-10-03 09:49:05

标签: spring mongodb

我收集了以下格式。

{
id:____,
name:"Carlos",
city:"Mumbai"
},
{
id:____,
name:"Pravin",
city:"Mumbai"
},
{
id:_____,
name:"Gaurav",
city:"Ahmedabad"
}

我希望整个文件与城市截然不同。我尝试了db.collection.distinct(“city”)。但它只返回不同的城市。

当前输出:

["Mumbai","Ahmedabad"]

预期产出:

{
id:____,
name:"Carlos",
city:"Mumbai"
},
{ 
id:_____,
name:"Gaurav",
city:"Ahmedabad"
}

上面你可以看到只有一个“孟买”的记录。我需要这种输出。

任何人都知道我们如何在spring-mongodb中获得不同的整个文档?

1 个答案:

答案 0 :(得分:0)

您可以尝试运行汇总管道操作,您可以使用 $group 运算符在 $first 管道阶段中包含其他字段。显示这种方法的两个例子如下:

Mongo Shell:

pipeline = [
    {
        "$group": {
            "_id": "$city",
            "id": { "$first": "$_id" },
            "name": { "$first": "$name" }
        }
    }
]

db.collection.aggregate(pipeline);

Spring Data MongoDB:

import static org.springframework.data.mongodb.core.aggregation.Aggregation.*;

MongoTemplate mongoTemplate = repository.getMongoTemplate();
Aggregation agg = newAggregation(
    group("city")
        .first("_id").as("id")
        .first("name").as("name")
);

AggregationResults<OutputType> result = mongoTemplate.aggregate(agg,
                                            "collection", OutputType.class);
List<OutputType> mappedResult = result.getMappedResults();