【问题标题】:MongoDB - Jongo - maximum value of a field with aggregationMongoDB - Jongo - 具有聚合的字段的最大值
【发布时间】:2014-12-12 00:04:54
【问题描述】:

我的收藏中有这种类型的文档。我存储了许多具有版本的组件。

{
   "_id" : "compagny/component_name/2.3.3",
   "type" : "action",
   "owner" : "compagny",
   "name" : "component_name",
   "version" : "2.3.3",
   "splitVersion" : {
      "major" : 2,
      "minor" : 3,
      "patch" : 3 },
    "jar" : "url...myArtifact.jar",
    "timestamp" : ISODate("2014-10-16T14:25:22.954Z"),
    "artifactKey" : "artifact-loadsupport/2.3.3"

}

我正在寻找一种方法来检索组件的最新版本。换句话说,获取具有相同所有者/名称的每个组件的最新版本。

我可以通过这种聚合得到我的结果,但结果格式不正确:

db.components.aggregate(   
{$sort: {type : 1, owner : 1, name : 1, "splitVersion.major" : -1, "splitVersion.minor": -1, "splitVersion.patch" : -1} },   
{$group: { _id: {owner:"$owner", name : "$name"}, version: { $first: "$version" }}}
)

我可以得到这个聚合的结果,但我怎样才能返回完整的文档? (和 .find() 一样)

因为我用 Jongo 映射我的数据,所以处理这个聚合结果并不容易......结果没有映射到我的文档类。我必须手动绑定每个值...

谢谢

【问题讨论】:

    标签: mongodb jongo


    【解决方案1】:

    您可以使用此处建议的 https://stackoverflow.com/a/16662878/1333610$project 来执行此操作。

    db.components.aggregate(   
    { $sort: {type : 1, 
              owner : 1, 
              name : 1, 
              "splitVersion.major" : -1, 
              "splitVersion.minor": -1, 
              "splitVersion.patch" : -1
             } 
    },
    {$group: { _id: {owner:"$owner", name : "$name"}, 
                version: { $first: "$version" },
                splitVersion: { $first: "$splitVersion" },
                jar: { $first: "$jar" }
                // similarly add all the fields in your doc with $first
              }
    },
    {$project: {_id: 0, 
                 owner: "$_id.owner", 
                 name: "$_id.name", 
                 version: 1, 
                 splitVersion: 1, 
                 jar: 1
                 // add all the fields you want here
                } 
    }
    )
    

    这是有效的,因为 $first 存储与第一个字段的第一个匹配项对应的字段,即在您的情况下为 version

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-04
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多