我有一个带有以下文件的物品集合.
{ "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) 在我的文档中,十进制值存储为String( 因为我BigDecimal在 Java 中转换为String)。当我一次查看一份文档时,这是完全可以的并且是必需的。但是,我要求将它们视为Double聚合目的(例如,$sum)。
有没有办法让我可以在聚合管道期间的操作(或其他方式)期间隐藏Stringto 。这样我的连续管道将在现场进行。Double$project$sumDouble
我不考虑将它们存储为 的选项Double,因为我需要保留每个文档基础的精度,但是如果在我的聚合操作期间精度丢失,我就可以了。
Spring Data MongoDB映射默认将BigDecimal转换为String。但是,我希望它们在mongodb中转换为Double。后者对于在mongodb中的此字段上进行查询(比较查询/聚合查询)是必需的。如何注册自己的转换器(BigDecimalToDouble / DoubleToBigDecimal)以执行此操作?
在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)
我有以下问题.
我的实际想法是对聚合结果进行分页.在上面的场景中,如果$ group维护排序顺序并仅处理所需的记录数,我想$match condition {$ge: 'lastPersonName'}在后续页面查询中应用.
作为我的代码的一部分,我有一个空参数的方法.对于e..g,
public MasterData fetchMasterData() {
// DO something.
}
Run Code Online (Sandbox Code Playgroud)
我想添加一个带密钥的@Cacheable作为'masterdata'.我尝试了以下内容,但它查找名为"masterdata"的bean.我试过了@Cacheable(cache="master", key="masterdata")
如果我保留key属性,我知道它需要空键.但我想明确地给出一个常数作为关键.
有没有办法做到这一点?
MongoDBdb.collection.bulkWrite()支持updateMany和deleteMany。
有什么理由不支持insertMany吗?