将 mongodb 聚合查询翻译成 Java/Kotlin Spring Data
Posted
技术标签:
【中文标题】将 mongodb 聚合查询翻译成 Java/Kotlin Spring Data【英文标题】:Translate mongodb aggregate query into Java/Kotlin Spring Data 【发布时间】:2021-04-07 09:40:39 【问题描述】:所以我想出了一个我不确定如何转换为 Spring Data 的查询。这是查询:
db.collection.aggregate([
$group:
_id: "$field",
count:
$sum: "$count"
,
data:
"$addToSet": "$$ROOT"
,
$sort:
count: -1
,
$limit: 10
,
$unwind: "$data"
])
有问题的部分是unwind
。在这个原始查询中,我将正在处理的原始文档(“$$ROOT”)放入data
,因此在处理集合后,我可以展开它并最终得到我真正想要的文档.这在外壳上工作正常。问题是我没有看到如何在 Java/Kotlin 中执行相同的操作,我可以添加到集合中,而无需稍后引用该数据。有人可以帮我写下 Java/Kotlin 和 Spring Data 的样子吗?
【问题讨论】:
您是否尝试使用 MongoDB Compass 实用程序将查询转换为任何编程语言?您可以在那里加载聚合函数并将其导出到 Java。 没听说过,去看看吧。 这里是link 我知道在春天怎么做,但我不知道 kotlin。你可以在 kotlin 中使用mongoTemplate
吗?如果春天 oot 我可以回答你
@varman 是的,请用 java 写。我在 kotlin 中使用 mongotemplate :)
【参考方案1】:
你可以试试这个
public List<Object> test()
Aggregation aggregation = Aggregation.newAggregation(
group("field")
.sum("count").as("count")
.addToSet("$$ROOT").as("data"),
sort(Sort.Direction.DESC, "count"),
limit(10),
unwind("data")
).withOptions(AggregationOptions.builder().allowDiskUse(Boolean.TRUE).build());
return mongoTemplate.aggregate(aggregation, mongoTemplate.getCollectionName(YOUR_COLLECTION.class), Object.class).getMappedResults();
【讨论】:
以上是关于将 mongodb 聚合查询翻译成 Java/Kotlin Spring Data的主要内容,如果未能解决你的问题,请参考以下文章