假设我有一个集合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")
);
答案 0 :(得分:0)
在java中,相关代码应该有点像:
collection.aggregate(
Arrays.asList(
Aggregates.match(Filters.eq("tags", "leather")),
Aggregates.group("$price", Accumulators.avg("$price", "averagePrice"))
)
)