mongodb - 如何使用聚合检查 MongoDB 数据库中的所有文档以获取特定字段的最新值?
问题描述
我是 MongoDB 的新手,正在使用它处理 NodeJS 代码。
我需要使用聚合函数来提取book_version
每本书的最新版本。
这是我的数据库的外观:
[
{
"book_id": "ab12nld”,
"book_version": "0”,
"author": “Sam”,
“name”: “Sample Book”,
“comments”: “Done”
},
{
"book_id": "ab12nld”,
"book_version": "1",
"author": "Martin",
"name": "Sample Book",
“comments”: “In Progress”
},
{
"book_id": "ab12nld”,
"book_version": "2",
"author": "Roy",
"name": "Sample Book",
“comments”: “To-Do”
}
]
[
{
"book_id": "bcj123n”,
"book_version": "0”,
"author": “Don”,
“name”: “Another Book”,
“comments”: “Done”
},
{
"book_id": "bcj123n”,
"book_version": "1",
"author": "Ray",
"name": "Another Book",
“comments”: “In Progress”
},
{
"book_id": "bcj123n”,
"book_version": "2",
"author": "Max",
"name": "Another Book",
“comments”: “To-Do”
}
]
[
{
"book_id": "k23d1d3”,
"book_version": "0”,
"author": “Sunny”,
“name”: “New Book”,
“comments”: “Done”
},
{
"book_id": "k23d1d3”,
"book_version": "1",
"author": "Archer",
"name": "New Book",
“comments”: “In Progress”
}
]
[
{
"book_id": "o902f3s”,
"book_version": "0”,
"author": “Joy”,
“name”: “Nice Book”,
“comments”: “Done”
},
{
"book_id": "o902f3s”,
"book_version": "1",
"author": "James",
"name": "Nice Book",
“comments”: “In Progress”
},
{
"book_id": "o902f3s”,
"book_version": "2”,
"author": “Pam”,
“name”: “Nice Book”,
“comments”: “Done”
},
{
"book_id": "o902f3s”,
"book_version": "3",
"author": "Jonah",
"name": "Nice Book",
“comments”: “Completed”
}
]
book_version
结果,我应该得到每个对象的最大值book_id
以及整个对象:
{
"book_id": "ab12nld”,
"book_version": "2",
"author": "Roy",
"name": "Sample Book",
“comments”: “To-Do”
},
{
"book_id": "bcj123n”,
"book_version": "2",
"author": "Max",
"name": "Another Book",
“comments”: “To-Do”
},
{
"book_id": "k23d1d3”,
"book_version": "1",
"author": "Archer",
"name": "New Book",
“comments”: “In Progress”
},
{
"book_id": "o902f3s”,
"book_version": "3",
"author": "Jonah",
"name": "Nice Book",
“comments”: “Completed”
}
解决方案
db.collection.aggregate([
{
$sort: {
// Sort by the book_version from highest to lowest
book_version: -1
}
},
{
$group: {
// Group the documents by their book_id
_id: "$book_id",
book_version: {
// The first book_version is the highest book version
// The same thing applies to every other first-of other book fields
$first: "$book_version"
},
book_id: {
$first: "$book_id"
},
author: {
"$first": "$author"
},
name: {
"$first": "$name"
},
comments: {
"$first": "$comments"
}
}
}
])
推荐阅读
- wordpress - 在 wordpress 插件开发中,我想使用 where 查询从数据库中获取数据
- jquery - 在同一个视图上有两个表单,为什么我只能在第二个表单中输入文本?
- reactjs - 如何在没有 Redux 的 React js 中将 Props 从一个状态组件发送到另一个状态组件
- android - 如果仅添加新表,则反应式 android 数据库迁移
- java - OpenJDK 或 Oracle JDK 上的方法跟踪
- python - 如何从另一个类 python 正确访问类函数
- linux - 比较文件之间的值
- java - 如何在同一项目的其他类中使用公共类报告(用于记录目的)和公共静态方法
- c# - 如何在 Unity 中旋转 Vector3
- react-native - 带有 React Native 的 ClojureScript - 文件下载