2014-10-16 95 views
1

我有这种类型的文件到我的集合中。我存储了许多有版本的组件。MongoDB - Jongo - 聚合字段的最大值

{ 
    "_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" 

}

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

我可以有我的结果与此agregation但结果没有得到很好的格式化:

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映射数据,处理这个聚合结果并不容易...结果没有我的文档类映射。我必须手动绑定值操作搜索...

感谢

回答

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在你的情况下,第一匹配对应的字段。

+0

谢谢,$项目许可证来解决我的问题。 – ascott 2014-10-21 12:07:34