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

4
我正在尝试在MongoDB中查询一组嵌套文档,并获取该嵌套文档中特定字段的最大值。(使用Java)
以下是文档结构示例,其中我想查找数组中"value"字段的最大值。
{
    "_id" : ObjectId("526d89571cd72ce9dbb6b443"),
    "array" : [ 
         {"text" : "this is a nested document", "value" : 1 },
         {"text" : "this is another nested document", "value" : 2 }
    ]
}
2个回答

4
你也可以尝试现代方法 - 聚合框架

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

db.collection.aggregate([
    { $unwind: "$array" },
    { $group: { _id: "$_id", value: { $max: "$array.value" } } }
]);

2) 查找指定元素的最大数组 'value' 值:

db.collection.aggregate([
    { $match: { _id: new ObjectId("526d89571cd72ce9dbb6b443") } },
    { $unwind: "$array" },
    { $group: { _id: null, value: { $max: "$array.value" } } }
]);

在这些示例中,请使用实际的集合名称而不是collection

有关如何在Java MongoDB驱动程序中使用聚合的一些信息:Java驱动程序和聚合框架


这两个都返回 { "result" : [ ], "ok" : 1 } 吗? - August
1
@August,由于您在问题中没有指定真实的集合名称,我只是将其命名为“collection”。但您必须使用真实的集合名称。(我已将此添加到答案中) - Shad

3

你可以用 MongoDB 的 map/reduce 相关功能来轻松实现此操作。以下是我写的 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中进行Map/Reduce查询。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接