MongoDB Spring Data聚合平均值

时间:2017-08-27 20:35:42

标签: java spring mongodb spring-data-mongodb

假设我有一个集合items,这些是此集合中的数据:

{ 
  "_id": 1
  "tags": ["handbag", "women", "leather"]
  "price": 30
}, {
  "_id": 2
  "tags": ["jewelry", "women", "necklace"]
  "price": 40
}, {
  "_id": 3
  "tags": ["men", "leather", "necklace"] 
  "price": 10
}

使用java模型

class Item {
  public ObjectId id;
  public List<String> tags;
  public int price;
}

如何获得标有leather的商品的平均价格?

我知道从mongodb cli我可以得到这个:

db.items.aggregate([
  { $match: { tags: { $in: ["leather"] } } }, 
  { $group: { _id: null, averagePrice: { $avg: "$price" } } }
])

但是如何将其转换为java spring boot / data code? Aggregation.group()方法仅接受我无法指定的字段的名称_id: null,因此它会将所有匹配的元素组合为一个组。

以下是Java中的聚合查询

Aggregation.newAggregation(
   match(Criteria.where("tags").in("leather")),
   group("_id") // how to group all matching rows in one group.
               .avg("price").as("averagePrice")
);

1 个答案:

答案 0 :(得分:0)

在java中,相关代码应该有点像:

collection.aggregate(
    Arrays.asList(
        Aggregates.match(Filters.eq("tags", "leather")),
        Aggregates.group("$price", Accumulators.avg("$price", "averagePrice"))
    )
)