Aja*_*jax 7 java mapreduce mongodb aggregation-framework spring-data-mongodb
我们有以下字段的集合'消息'
_id | messageId | chainId | createOn
1 | 1 | A | 155
2 | 2 | A | 185
3 | 3 | A | 225
4 | 4 | B | 226
5 | 5 | C | 228
6 | 6 | B | 300
Run Code Online (Sandbox Code Playgroud)
我们希望按照以下标准选择所有文档字段
所以,预期的结果是
_id | messageId | chainId | createOn
3 | 3 | A | 225
5 | 5 | C | 228
6 | 6 | B | 300
Run Code Online (Sandbox Code Playgroud)
我们在java应用程序中使用spring-data.我尝试采用不同的方法,到目前为止没有任何帮助.
是否有可能通过单一查询实现上述目标?
Nei*_*unn 10
您想要的是可以通过聚合框架实现的功能.(对其他人有用)的基本形式是:
db.collection.aggregate([
// Group by the grouping key, but keep the valid values
{ "$group": {
"_id": "$chainId",
"docId": { "$first": "$_id" },
"messageId": { "$first": "$messageId" },
"createOn": { "$first": "$createdOn" }
}},
// Then sort
{ "$sort": { "createOn": -1 } }
])
Run Code Online (Sandbox Code Playgroud)
因此,在"messageId"的不同值上"分组",同时获取$first每个其他字段的边界值.或者,如果你想要最大然后使用$last,但是对于最小或最大的行,它可能是有意义的$sort,否则只是使用$min,$max如果整行不重要.
有关使用aggregate()的更多信息,请参阅MongoDB 文档,以及驱动程序JavaDocs和SpringData Mongo连接器文档,以获取聚合方法和可能的帮助程序的更多用法.
| 归档时间: |
|
| 查看次数: |
8932 次 |
| 最近记录: |