我们收集了包含以下字段的“消息”
_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
我们要选择具有以下条件的文档的所有字段
所以,预期的结果是
_id | messageId | chainId | createOn
3 | 3 | A | 225
5 | 5 | C | 228
6 | 6 | B | 300
我们在 java 应用程序中使用 spring-data。我尝试了不同的方法,到目前为止没有任何帮助。
是否可以通过单个查询实现上述目标?
最佳答案
您想要的是可以通过聚合框架实现的东西。 (对其他人有用)的基本形式是:
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 } }
])
这样,在取 $first
时,对“messageId”的不同值进行“分组”每个其他字段的边界值。或者,如果您想要最大的,则使用 $last
相反,但对于最小或最大的行,$sort
可能是有意义的首先,否则只需使用 $min
和 $max
如果整行不重要。
查看 MongoDB aggregate()
文档以获取有关使用的更多信息,以及驱动程序 JavaDocs 和 SpringData Mongo 连接器文档,以了解聚合方法和可能的帮助程序的更多用法。
https://stackoverflow.com/questions/23494273/
相关文章:
mongodb - 在 mongo shell 中加载和运行聚合
node.js - 是否可以将额外的参数传递给 Mongoose 更新回调
javascript - 在 MongoDB 更新语句中使用变量
java - MongoDB Java 驱动程序 : distinct with sort
python - 有人知道 pymongo 中 2dsphere 索引的工作示例吗?
python - Mongodb复制集自动重新连接在nginx + uwsgi上下运行后无法正常工作