我正在尝试在mongodb中查询嵌套文档数组,并且还获得该嵌套文档中特定字段的最高值。 (在java中)
以下是文档结构的示例,我想在其中找到数组中"value"
字段的最大值。
{
"_id" : ObjectId("526d89571cd72ce9dbb6b443"),
"array" : [
{"text" : "this is a nested document", "value" : 1 },
{"text" : "this is another nested document", "value" : 2 }
]
}
答案 0 :(得分:4)
您还可以尝试使用现代方法 - aggregation framework:
1)查找集合中所有元素的最大数组“值”:
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 Driver and Aggregation Framework。
答案 1 :(得分: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开发环境,here's an article关于如何用Java进行Map / Reduce查询。