我将此类文件存入我的收藏中。我存储了许多具有版本的组件。
{
"_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映射我的数据,所以处理这个聚合结果并不容易......结果没有我的文档类的映射。我必须手动绑定earch值......
由于
答案 0 :(得分: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
。