Java 从文档中获取多个整数,将它们合并,除以值,然后从集合中获取最上面的结果
我想从mongodb集合中获取最高的“全局”值。 假设我有这个收藏:Java 从文档中获取多个整数,将它们合并,除以值,然后从集合中获取最上面的结果,java,mongodb,aggregation-framework,Java,Mongodb,Aggregation Framework,我想从mongodb集合中获取最高的“全局”值。 假设我有这个收藏: [{ "_id": 1, "elo": { "kit1": 1020, "kit2": 1000, "kit3": 1007 } }, { "_id": 2, "elo": { "kit1": 1041, "kit2": 1065, "kit3": 1051 } }] \u id:1的全局elo将为1009,\u id:2的全局elo将为1052 所以
[{
"_id": 1,
"elo": {
"kit1": 1020,
"kit2": 1000,
"kit3": 1007
}
},
{
"_id": 2,
"elo": {
"kit1": 1041,
"kit2": 1065,
"kit3": 1051
}
}]
\u id:1
的全局elo将为1009
,\u id:2
的全局elo将为1052
所以我期待的结果是:
[
{
"_id": 2,
"global": 1052
},
{
"_id": 1,
"global": 1009
}
]
我写了这个查询:
([
{ $group: ("global": { $sum: "/*What to do here when I have multiple values*/" } } },
{ $sort: { "global": -1 } },
{ $limit: 10 }}
])
但是我被困在$group部分这应该行得通
aggregate([
{ "$group": {"_id": "$_id", "global": {"$avg": "$elo"} } },
{ "$sort": { "global": -1 } },
{ "$limit": 10 }
]);
这应该行得通
aggregate([
{ "$group": {"_id": "$_id", "global": {"$avg": "$elo"} } },
{ "$sort": { "global": -1 } },
{ "$limit": 10 }
]);
我最终得到了这个解决方案:
aggregate(asList(
new Document("$project",
new Document("global", new BsonArray(getKitArray()))),
new Document("$skip", pos),
new Document("$limit", 1)));
因为我知道工具包ID,我基本上把它们封装在数组中,解决了这个问题
至于getKitArray(),我使用了
List<BsonValue> kits = new ArrayList<>();
for (int i = 0; i < kits.size(); i++) {
kits.add(new BsonString("$" + ArenaKit.kits.get(i).id));
}
return kits;
List kits=new ArrayList();
对于(int i=0;i
我最终得到了这个解决方案:
aggregate(asList(
new Document("$project",
new Document("global", new BsonArray(getKitArray()))),
new Document("$skip", pos),
new Document("$limit", 1)));
因为我知道工具包ID,我基本上把它们封装在数组中,解决了这个问题
至于getKitArray(),我使用了
List<BsonValue> kits = new ArrayList<>();
for (int i = 0; i < kits.size(); i++) {
kits.add(new BsonString("$" + ArenaKit.kits.get(i).id));
}
return kits;
List kits=new ArrayList();
对于(int i=0;i
是否需要kit1
、kit2
和kit3
字段?如果elo
字段是一个数组,那么您的收集是否仍然有效?使用project
而不是group
进行聚合检查@JerodJohnson是的,这是必需的,实际的工具包名称不同这只是一个示例example@Yogesh我会试试的,谢谢!是否需要kit1
、kit2
和kit3
字段?如果elo
字段是一个数组,那么您的收集是否仍然有效?使用project
而不是group
进行聚合检查@JerodJohnson是的,这是必需的,实际的工具包名称不同这只是一个示例example@Yogesh我会试试的,谢谢!不,那不行,因为它不是整数数组。不,那不行,因为它不是整数数组