4

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

"value"这是文档结构的示例,我想在其中找到数组中字段的最大值。

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

2 回答 2

4

您还可以尝试现代方法 -聚合框架

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 驱动程序中使用聚合的一些信息:Java 驱动程序和聚合框架

于 2013-10-27T23:19:25.263 回答
3

您可以使用 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 中进行 Map/Reduce 查询的文章。

于 2013-10-27T22:00:41.837 回答