考虑一组具有以下字段的对象:
{
id: // String
type: //Integer
score: //Double value
}
我想使用类型查询集合,并为返回的文档将它们的分数除以它们的最大值。考虑以下查询对象:
DBObject searchQuery = new BasicDBObject("type", 2);
collection.find(searchQuery);
通过上述查询,它将返回一些文档。我想maximum
在所有这些文档中获得分数,然后将所有这些文档的分数除以获取maximum
。
我怎样才能做到这一点??
我可以使用聚合找到最大值,如下所示:
String propertyToOperateOn = "score";
DBObject match = new BasicDBObject("$match", searchQuery);
DBObject groups = new BasicDBObject("_id", null);
DBObject operation = new BasicDBObject("$max", "$" + propertyToOperateOn);
groups.put("maximum", operation);
DBObject apply = new BasicDBObject("$group", groups);
AggregationOutput output = mongoConstants.IAScores.aggregate(match, apply);
这里输出将包含最大值。但是,我怎样才能通过这个最大值更新(除)所有文档的分数?
我希望有更好的方法来完成这项任务,但我无法得到它,因为我对 mongodb(或任何数据库本身)非常陌生。