У меня есть "товарная" коллекция, которая имеет поле "категория". Я пытаюсь получить количество разных категорий. Я не могу использовать db.product.distinct("category"). Длина, превышающая 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})
Я не могу перевести это в запрос агрегации весны данных mongodb. Пожалуйста помоги. Я получаю следующие ошибки с тем, что я пробовал:
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.group("category"),
Aggregation.group(" ").count().as("numDistinctCategories"));
Ошибка: AggregationField не может быть нулевым. Я пробовал другие строки во второй группе, но это дает неверную ошибку ссылки.
Лучший способ написать то, что вы пишете здесь, будет в форме оболочки:
db.product.aggregate([
{"$group": { "_id": "$category", "count": { "$sum": 1 } } }
])
Это дает общее количество баллов за каждую категорию.
Что делает ваша форма запроса, поскольку она отбрасывает группирующую часть и просто учитывает отдельные термины. Но это будет так, как вы на самом деле пишете это, так как это просто случайность, что в JavaScript "строка", которая не является переменной, имеет значение null
:
db.product.aggregate([
{ "$group": { "_id": "$category" } },
{ "$group": { "_id": null, , "count": { "$sum": 1 } } }
])
В этом случае ваш способ передачи данных весной:
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.group("category"),
Aggregation.group().count().as("count")
);
System.out.println(aggregation);
System.out.
там отображается правильно сформированное утверждение.
Попробуйте в оболочке. Нет разницы между "" и "" или "aaaa" без префикса "$", что и делает его ссылкой на поле. Данные Spring обрабатывают "строку" как поле, поэтому не поставляя один равным null