如何使用聚合检查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_version": "2","author": "Roy",“comments”: “To-Do”
  }
]
[
  {
    "book_id": "bcj123n”,"author": “Don”,“name”: “Another Book”,{
    "book_id": "bcj123n”,"author": "Ray","name": "Another Book","author": "Max",“comments”: “To-Do”
  }
]
[
  {
    "book_id": "k23d1d3”,"author": “Sunny”,“name”: “New Book”,{
    "book_id": "k23d1d3”,"author": "Archer","name": "New Book",“comments”: “In Progress”
  }
]
[
  {
    "book_id": "o902f3s”,"author": “Joy”,“name”: “nice Book”,{
    "book_id": "o902f3s”,"author": "James","name": "nice Book","book_version": "2”,"author": “Pam”,"book_version": "3","author": "Jonah",“comments”: “Completed”
  }
]

因此,我应该为每个book_version以及整个对象获取book_id的最大值:

{
    "book_id": "ab12nld”,“comments”: “To-Do”
  },“comments”: “Completed”
  }

wangliqingkong 回答:如何使用聚合检查MongoDB数据库中的所有文档的特定字段的最新值?

您可以结合使用$sort$group以获得所需的结果:

@font-face {

  font-family: lg;
  src: url(../fonts/lg.eot?n1z373);
  src: url(../fonts/lg.eot?#iefixn1z373) format("embedded-opentype"),url(../fonts/lg.woff?n1z373) format("woff"),url(../fonts/lg.ttf?n1z373) format("truetype"),url(../fonts/lg.svg?n1z373#lg) format("svg");
  font-weight: 400;
  font-style: normal;
 }
,

您可以book_id $group,并使用$max运算符捕获lastVersion。然后,您需要$filter属于特定组的所有书籍,并使用$replaceRoot将单个找到的最新版本提升到根级别。

db.collection.aggregate([
    {
        $group: {
            _id: "$book_id",lastVersion: { $max: "$book_version" },versions: { $push: "$$ROOT" }
        }
    },{
        $replaceRoot: {
            newRoot: {
                $let: {
                    vars: {
                        lastVer: {
                            $filter: { 
                                input: "$versions",cond: { $eq: [ "$$this.book_version","$lastVersion" ] } 
                            }
                        }
                    },in: { $arrayElemAt: [ "$$lastVer",0 ] }
                }
            }
        }
    }
])

Mongo Playground

本文链接:https://www.f2er.com/3123264.html

大家都在问