小编Poo*_*rna的帖子

mongodb单个操作中的多个聚合

我有一个带有以下文件的物品集合.

{ "item" : "i1", "category" : "c1", "brand" : "b1" }  
{ "item" : "i2", "category" : "c2", "brand" : "b1" }  
{ "item" : "i3", "category" : "c1", "brand" : "b2" }  
{ "item" : "i4", "category" : "c2", "brand" : "b1" }  
{ "item" : "i5", "category" : "c1", "brand" : "b2" }  
Run Code Online (Sandbox Code Playgroud)

我想分开汇总结果 - >按类别计算,按品牌计算.请注意,不计入(类别,品牌)

我可以使用map-reduce使用以下代码执行此操作.

map = function(){
    emit({type:"category",category:this.category},1);
    emit({type:"brand",brand:this.brand},1);
}
reduce = function(key, values){
    return Array.sum(values)
}
db.item.mapReduce(map,reduce,{out:{inline:1}})
Run Code Online (Sandbox Code Playgroud)

结果是

{
        "results" : [
                { …
Run Code Online (Sandbox Code Playgroud)

mongodb aggregation-framework

7
推荐指数
2
解决办法
4461
查看次数

聚合管道期间MongoDB字符串到双精度转换

在我的文档中,十进制值存储为String( 因为我BigDecimal在 Java 中转换为String)。当我一次查看一份文档时,这是完全可以的并且是必需的。但是,我要求将它们视为Double聚合目的(例如,$sum)。

有没有办法让我可以在聚合管道期间的操作(或其他方式)期间隐藏Stringto 。这样我的连续管道将在现场进行。Double$project$sumDouble

我不考虑将它们存储为 的选项Double,因为我需要保留每个文档基础的精度,但是如果在我的聚合操作期间精度丢失,我就可以了。

mongodb aggregation-framework

5
推荐指数
1
解决办法
3370
查看次数

如何在Spring-Data-MongoDB框架中将BigDecimal转换为Double

Spring Data MongoDB映射默认将BigDecimal转换为String。但是,我希望它们在mongodb中转换为Double。后者对于在mongodb中的此字段上进行查询(比较查询/聚合查询)是必需的。如何注册自己的转换器(BigDecimalToDouble / DoubleToBigDecimal)以执行此操作?

java spring mongodb mongodb-java spring-data-mongodb

5
推荐指数
1
解决办法
3342
查看次数

Mongodb聚合$ group后跟$限制分页

在MongoDB聚合管道中,从一个阶段到另一个阶段的记录流发生一次/批次(或)将等待当前阶段完成整个集合,然后再将其传递到下一阶段?

例如,我有一个带有以下样本记录的集合classtest

{name: "Person1", marks: 20}
{name: "Person2", marks: 20}
{name: "Person1", marks: 20}
Run Code Online (Sandbox Code Playgroud)

我有大约100名学生的1000条记录,我有以下聚合查询

    db.classtest.aggregate(
[
    {$sort: {name: 1}},
    {$group: {_id: '$name',
            total: {$sum: '$marks'}}},
    {$limit: 5}
])
Run Code Online (Sandbox Code Playgroud)

我有以下问题.

  1. 排序顺序在最终结果中丢失.如果我在$ group之后放置另一种排序,则结果会正确排序.这是否意味着$ group不维护以前的排序顺序?
  2. 我想将结果限制为5.在传递到限制之前,必须完成组操作(对于所有1000条记录).(或)当有记录时,组操作将记录传递到限制阶段,当满足限制阶段的要求时,停止处理?

我的实际想法是对聚合结果进行分页.在上面的场景中,如果$ group维护排序顺序并仅处理所需的记录数,我想$match condition {$ge: 'lastPersonName'}在后续页面查询中应用.

  1. 我不想在$ group之前应用$ limit,因为我想要5名学生的结果而不是前5个记录.
  2. 我可能不想使用$ skip,因为这意味着有效地遍历那些记录.

mongodb aggregation-framework

4
推荐指数
2
解决办法
2万
查看次数

Spring缓存常量作为键

作为我的代码的一部分,我有一个空参数的方法.对于e..g,

public MasterData fetchMasterData() {
// DO something.
}
Run Code Online (Sandbox Code Playgroud)

我想添加一个带密钥的@Cacheable作为'masterdata'.我尝试了以下内容,但它查找名为"masterdata"的bean.我试过了@Cacheable(cache="master", key="masterdata")

如果我保留key属性,我知道它需要空键.但我想明确地给出一个常数作为关键.

有没有办法做到这一点?

spring-cache

3
推荐指数
1
解决办法
2208
查看次数

0
推荐指数
1
解决办法
2146
查看次数