Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从文档中获取多个整数,将它们合并,除以值,然后从集合中获取最上面的结果_Java_Mongodb_Aggregation Framework - Fatal编程技术网

Java 从文档中获取多个整数,将它们合并,除以值,然后从集合中获取最上面的结果

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 所以

我想从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": 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我会试试的,谢谢!不,那不行,因为它不是整数数组。不,那不行,因为它不是整数数组