Java 字段最大值的嵌套文档查询数组

Java 字段最大值的嵌套文档查询数组,java,arrays,mongodb,Java,Arrays,Mongodb,我试图在mongodb中查询嵌套文档数组,并获取该嵌套文档中特定字段的最大值。(爪哇语) 下面是文档结构的一个示例,我想在其中查找数组中“value”字段的最大值 { "_id" : ObjectId("526d89571cd72ce9dbb6b443"), "array" : [ {"text" : "this is a nested document", "value" : 1 }, {"text" : "this is another

我试图在mongodb中查询嵌套文档数组,并获取该嵌套文档中特定字段的最大值。(爪哇语)

下面是文档结构的一个示例,我想在其中查找数组中
“value”
字段的最大值

{
    "_id" : ObjectId("526d89571cd72ce9dbb6b443"),
    "array" : [ 
         {"text" : "this is a nested document", "value" : 1 },
         {"text" : "this is another nested document", "value" : 2 }
    ]
}

使用MongoDB map/reduce可以非常轻松地实现这一点。这是我要写的地图/地图:

map = function() { 
  for (var a in this.array) { 
    emit('value', a.value); 
  }
};

reduce_max = function(key, values) {
    var max = values[0];
    values.forEach(function(val) {
        if (val > max) max = val;
    })
    return max;
};

而且,虽然我还没有准备好java开发环境,但关于如何在java中进行映射/减少查询。

您也可以尝试现代方法-:

1)查找集合中所有元素的最大数组“值”:

db.collection.aggregate([
    { $unwind: "$array" },
    { $group: { _id: "$_id", value: { $max: "$array.value" } } }
]);
2)查找指定元素的最大数组“值”:

db.collection.aggregate([
    { $match: { _id: new ObjectId("526d89571cd72ce9dbb6b443") } },
    { $unwind: "$array" },
    { $group: { _id: null, value: { $max: "$array.value" } } }
]);
在这些示例中,请使用真实的集合名称,而不是
collection


关于如何在Java MongoDB驱动程序中使用聚合的一些信息:.

这两个都返回
{“result”:[],“ok”:1}
?@August,因为您在问题中没有指定真实的集合名称,所以我只将其命名为
集合
。但您必须使用真实的集合名称。(我在答案中加了这个)