簡體   English   中英

Spring數據相當於mongodb中的以下聚合操作

[英]Spring data equivalent of below aggregation operation in mongodb

我有一個“產品”集合,其中包含“類別”字段。 我想要計算不同的類別。 我不能使用db.product.distinct(“category”)。長度因為它超過16mb cap並且出現以下錯誤: -

> 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數據mongodb聚合查詢。 請幫忙。 我正在嘗試以下錯誤:

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

錯誤:AggregationField不能為null。 我在第二組操作中嘗試了其他字符串,但它提供了無效的引用錯誤。

寫下你在這里寫的東西的更好方法是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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM