gpt4 book ai didi

java - Spring数据相当于mongodb中的以下聚合操作

转载 作者:行者123 更新时间:2023-11-29 05:20:46 24 4
gpt4 key购买 nike

我有一个“产品”集合,其中有一个“类别”字段。我正在尝试计算不同类别的数量。我不能使用 db.product.distinct("category").length 因为它超过 16mb 上限并出现以下错误:-

> db.product.distinct("category").length
2014-07-21T08:58:25.289-0400 distinct failed: {
"errmsg" : "exception: distinct too big, 16mb cap",
"code" : 17217,
"ok" : 0
} at src/mongo/shell/collection.js:1108

因此,我正在为此使用聚合框架,并且我能够使用此查询进行计数:-

db.product.aggregate([{$group: {_id:"$category"}}, {$group: {_id:"", count:{$sum:1}}}], {allowDiskUse: true})

我无法将其转换为 spring data mongodb 聚合查询。请帮忙。我在尝试时遇到以下错误:

        Aggregation aggregation = Aggregation.newAggregation(
Aggregation.group("category"),
Aggregation.group(" ").count().as("numDistinctCategories"));

错误:AggregationField 不能为空。我在第二组操作中尝试了其他字符串,但它给出了无效引用错误。

最佳答案

最好的写法是用 shell 形式:

db.product.aggregate([
{"$group": { "_id": "$category", "count": { "$sum": 1 } } }
])

它提供了每个类别的总数。

您的查询表单的作用是将分组部分丢掉,只计算不同的术语。但这将是您真正编写它的方式,因为这只是侥幸,在 JavaScript 中,不是变量的“字符串”的计算结果为 null:

db.product.aggregate([
{ "$group": { "_id": "$category" } },
{ "$group": { "_id": null, , "count": { "$sum": 1 } } }
])

在这种情况下,您的 spring 数据编写方式是:

    Aggregation aggregation = Aggregation.newAggregation(
Aggregation.group("category"),
Aggregation.group().count().as("count")
);
System.out.println(aggregation);

System.out. 向您展示了正确格式的语句。

在 shell 中尝试。没有前缀“$”的“”和“”或“aaaa”之间没有区别,这就是它成为字段引用的原因。 Spring 数据将“字符串”视为一个字段,因此不提供等于 null

关于java - Spring数据相当于mongodb中的以下聚合操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24865893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com