当前位置: 首页 > news >正文

东莞樟木头网站建设公司网络推广与营销

东莞樟木头网站建设公司,网络推广与营销,有口碑的大连网站建设,提供信息门户网站制作聚合 聚合操作处理多个文档并返回计算结果。您可以使用聚合操作来#xff1a; 将多个文档中的值分组在一起。 对分组数据执行操作以返回单个结果。 分析数据随时间的变化。 要执行聚合操作#xff0c;您可以使用#xff1a; 聚合管道 单一目的聚合方法 Map-reduce 函…聚合 聚合操作处理多个文档并返回计算结果。您可以使用聚合操作来 将多个文档中的值分组在一起。 对分组数据执行操作以返回单个结果。 分析数据随时间的变化。 要执行聚合操作您可以使用 聚合管道 单一目的聚合方法 Map-reduce 函数 Map-reduce 函数 在mongoshell 中该db.collection.mapReduce() 方法是命令的包装器mapReduce。下面的例子使用该db.collection.mapReduce()方法。 定义 db.collection.mapReduce(map,reduce, { options }) 该map功能有以下要求 在map函数中将当前文档引用为函数中的this。 该map函数不应出于任何原因访问数据库。 该map函数应该是纯粹的或者对函数之外没有影响即副作用。 该map函数可以选择调用emit(key,value)任意次数来创建key与关联的输出文档value。 # 原型如下 function() {...emit(key, value); }该reduce函数表现出以下行为 该reduce函数不应访问数据库即使是执行读取操作。 该reduce功能不应影响外部系统。 reduceMongoDB 可以针对同一个键多次调用该函数。在这种情况下该键的函数的先前输出将成为该键的reduce 下一个函数调用的输入值之一 。 该reduce函数可以访问参数中定义的变量scope。 # 该reduce函数具有以下原型 function(key, values) {...return result; }插入测试数据。如下 sit_rs1:PRIMARY db.orders.insertMany([ ... { _id: 1, cust_id: A, ord_date: new Date(2023-06-01), price: 15, items: [ { sku: apple, qty: 5, price: 2.5 }, { sku: apples, qty: 5, price: 2.5 } ], status: 1 }, ... { _id: 2, cust_id: A, ord_date: new Date(2023-06-08), price: 60, items: [ { sku: apple, qty: 8, price: 2.5 }, { sku: banana, qty: 5, price: 10 } ], status: 1 }, ... { _id: 3, cust_id: B, ord_date: new Date(2023-06-08), price: 55, items: [ { sku: apple, qty: 10, price: 2.5 }, { sku: pears, qty: 10, price: 2.5 } ], status: 1 }, ... { _id: 4, cust_id: B, ord_date: new Date(2023-06-18), price: 26, items: [ { sku: apple, qty: 10, price: 2.5 } ], status: 1 }, ... { _id: 5, cust_id: B, ord_date: new Date(2023-06-19), price: 40, items: [ { sku: banana, qty: 5, price: 10 } ], status: 1}, ... { _id: 6, cust_id: C, ord_date: new Date(2023-06-19), price: 38, items: [ { sku: carrots, qty: 10, price: 1.0 }, { sku: apples, qty: 10, price: 2.5 } ], status: 1 }, ... { _id: 7, cust_id: C, ord_date: new Date(2023-06-20), price: 21, items: [ { sku: apple, qty: 10, price: 2.5 } ], status: 1 }, ... { _id: 8, cust_id: D, ord_date: new Date(2023-06-20), price: 76, items: [ { sku: banana, qty: 5, price: 10 }, { sku: apples, qty: 10, price: 2.5 } ], status: 1 }, ... { _id: 9, cust_id: D, ord_date: new Date(2023-06-20), price: 51, items: [ { sku: carrots, qty: 5, price: 1.0 }, { sku: apples, qty: 10, price: 2.5 }, { sku: apple, qty: 10, price: 2.5 } ], status: 1 }, ... { _id: 10, cust_id: D, ord_date: new Date(2023-06-23), price: 23, items: [ { sku: apple, qty: 10, price: 2.5 } ], status: 1 } ... ]) {acknowledged : true,insertedIds : [1,2,3,4,5,6,7,8,9,10] } sit_rs1:PRIMARY db.orders.find() { _id : 4, cust_id : B, ord_date : ISODate(2023-06-18T00:00:00Z), price : 26, items : [ { sku : apple, qty : 10, price : 2.5 } ], status : 1 } { _id : 6, cust_id : C, ord_date : ISODate(2023-06-19T00:00:00Z), price : 38, items : [ { sku : carrots, qty : 10, price : 1 }, { sku : apples, qty : 10, price : 2.5 } ], status : 1 } { _id : 1, cust_id : A, ord_date : ISODate(2023-06-01T00:00:00Z), price : 15, items : [ { sku : apple, qty : 5, price : 2.5 }, { sku : apples, qty : 5, price : 2.5 } ], status : 1 } { _id : 2, cust_id : A, ord_date : ISODate(2023-06-08T00:00:00Z), price : 60, items : [ { sku : apple, qty : 8, price : 2.5 }, { sku : banana, qty : 5, price : 10 } ], status : 1 } { _id : 9, cust_id : D, ord_date : ISODate(2023-06-20T00:00:00Z), price : 51, items : [ { sku : carrots, qty : 5, price : 1 }, { sku : apples, qty : 10, price : 2.5 }, { sku : apple, qty : 10, price : 2.5 } ], status : 1 } { _id : 3, cust_id : B, ord_date : ISODate(2023-06-08T00:00:00Z), price : 55, items : [ { sku : apple, qty : 10, price : 2.5 }, { sku : pears, qty : 10, price : 2.5 } ], status : 1 } { _id : 5, cust_id : B, ord_date : ISODate(2023-06-19T00:00:00Z), price : 40, items : [ { sku : banana, qty : 5, price : 10 } ], status : 1 } { _id : 7, cust_id : C, ord_date : ISODate(2023-06-20T00:00:00Z), price : 21, items : [ { sku : apple, qty : 10, price : 2.5 } ], status : 1 } { _id : 8, cust_id : D, ord_date : ISODate(2023-06-20T00:00:00Z), price : 76, items : [ { sku : banana, qty : 5, price : 10 }, { sku : apples, qty : 10, price : 2.5 } ], status : 1 } { _id : 10, cust_id : D, ord_date : ISODate(2023-06-23T00:00:00Z), price : 23, items : [ { sku : apple, qty : 10, price : 2.5 } ], status : 1 }示例按客户统计 对集合 orders 执行map-reduce操作 按 cust_id 进行分组 然后统计每个客户的 price 计算总和如下 首先 我们需要 定义map函数来处理每个输入文档: 在函数中this指的是map-reduce操作正在处理的文档。该函数将每个文档的 price 映射为 cust_id并发出 cust_id 和 price 。 sit_rs1:PRIMARY var myMapFun function() { ... emit(this.cust_id, this.price); ... };sit_rs1:PRIMARY print(myMapFun) function() {emit(this.cust_id, this.price); }然后用两个参数 keyCustId 和 valuesPrices 定义相应的reduce函数。 这里需要调用数组的 sum 方法计算客户订单总价。 valuesPrices 是一个数组其元素是map函数发出的price 字段的值并按 keyCustId 分组。该函数将 valuesPrice 数组缩减为其元素的总和 # 计算数组元素总和 sit_rs1:PRIMARY Array.sum([2,2,6,8]) 18# 计算数组平均值 sit_rs1:PRIMARY Array.avg([1,2,3]) 2sit_rs1:PRIMARY var myReduceFun function(keyCustId, valuesPrices) { ... return Array.sum(valuesPrices); ... };sit_rs1:PRIMARY print(myReduceFun) function(keyCustId, valuesPrices) {return Array.sum(valuesPrices); }最后使用 myMapFun 函数和 myReduceFun 函数对集合 orders 中的所有文档执行map-reduce统计 out: 指定map-reduce操作结果的位置。您可以输出到集合、通过操作输出到集合或内联输出。此操作将结果输出到名为 的集合 map_reduce_out。如果该 map_reduce_out 集合已存在则该操作将使用此 Map-Reduce 操作的结果替换内容。 sit_rs1:PRIMARY db.orders.mapReduce( ... myMapFun, ... myReduceFun, ... { out: map_reduce_out } ... ) {result : map_reduce_out,ok : 1,$clusterTime : {clusterTime : Timestamp(1690259241, 6),signature : {hash : BinData(0,KurueslJYcT5oExd8ujPIC/J3Q),keyId : NumberLong(7205479298910650370)}},operationTime : Timestamp(1690259241, 6) }查询 map_reduce_out 集合以验证结果是否正确 sit_rs1:PRIMARY db.map_reduce_out.find().sort( { _id: 1 } ) { _id : A, value : 75 } { _id : B, value : 121 } { _id : C, value : 59 } { _id : D, value : 150 }# 检查 cust_id 为 A 的客户 总和是 75 正确 sit_rs1:PRIMARY db.orders.find({ cust_id : A}, {price: 1}) { _id : 1, price : 15 } { _id : 2, price : 60 }# 检查 cust_id 为 B 的客户总和是 121 正确 sit_rs1:PRIMARY db.orders.find({ cust_id : B}, {price: 1}) { _id : 4, price : 26 } { _id : 3, price : 55 } { _id : 5, price : 40 } 示例按日期统计 按日期统计和上面示例一样只需要把 map 函数重新定义如下将每个文档的 price 映射为 ord_date并发出 ord_date 和 price 。 sit_rs1:PRIMARY var myMapFun2 function() { ... emit(this.ord_date, this.price); ... };sit_rs1:PRIMARY print(myMapFun2) function() {emit(this.ord_date, this.price); }然后用两个参数 keyOrdDate 和 valuesPrices 定义相应的reduce函数。 这里需要调用数组的 avg 方法计算平均客单价。 valuesPrices 是一个数组其元素是map函数发出的 price 字段的值并按 keyOrdDate 分组。该函数将 valuesPrice 数组缩减为其元素的总和的平均值 sit_rs1:PRIMARY var myReduceFun2 function(keyOrdDate, valuesPrices) { ... return Array.avg(valuesPrices); ... };sit_rs1:PRIMARY print(myReduceFun2) function(keyOrdDate, valuesPrices) {return Array.avg(valuesPrices); }最后使用 myMapFun2 函数和 myReduceFun2 函数对集合 orders 中的所有文档执行map-reduce统计 sit_rs1:PRIMARY db.orders.mapReduce( ... myMapFun2, ... myReduceFun2, ... { out: map_reduce_out2 } ... ) {result : map_reduce_out2,ok : 1,$clusterTime : {clusterTime : Timestamp(1690265083, 8),signature : {hash : BinData(0,pCWskY3HjLGEjSk00ARYdZKECDE),keyId : NumberLong(7205479298910650370)}},operationTime : Timestamp(1690265083, 8) }查询 map_reduce_out2 集合以验证结果是否正确 sit_rs1:PRIMARY db.map_reduce_out2.find() { _id : ISODate(2023-06-08T00:00:00Z), value : 57.5 } { _id : ISODate(2023-06-01T00:00:00Z), value : 15 } { _id : ISODate(2023-06-18T00:00:00Z), value : 26 } { _id : ISODate(2023-06-20T00:00:00Z), value : 49.333333333333336 } { _id : ISODate(2023-06-23T00:00:00Z), value : 23 } { _id : ISODate(2023-06-19T00:00:00Z), value : 39 }# 检查日期2023-06-08的订单平均值 sit_rs1:PRIMARY db.orders.find({ ord_date : ISODate(2023-06-08T00:00:00Z)}, {price: 1}) { _id : 2, price : 60 } { _id : 3, price : 55 } sit_rs1:PRIMARY print((6055)/2) 57.5# 检查日期2023-06-20的订单平均值 sit_rs1:PRIMARY db.orders.find({ ord_date : ISODate(2023-06-20T00:00:00Z)}, {price: 1}) { _id : 9, price : 51 } { _id : 7, price : 21 } { _id : 8, price : 76 }sit_rs1:PRIMARY print((512176)/3) 49.333333333333336对于需要自定义功能的 Map-Reduce 操作MongoDB 从 4.4 版本开始提供 $accumulator 和 $function 聚合运算符。使用这些运算符在 JavaScript 中自定义聚合表达式。 聚合管道作为 Map-Reduce 的替代方案 聚合管道提供比 Map-Reduce 操作更好的性能和可用性。 可以使用聚合管道运算符例如 $group、$merge等重写 Map-reduce 操作。
http://www.yutouwan.com/news/211701/

相关文章:

  • 网站开发的项目总结用软件做网站
  • 自己的电脑建网站开发网站需要什么硬件
  • 做企业网站的费用软件开发行业市场分析
  • 重庆荣昌网站建设公司网站首页制作方案
  • 一个备案号多个网站简述建设一个网站的具体过程
  • 网站权重排行WordPress访问mysql慢
  • 深圳专业手机网站建设输入关键词自动生成标题
  • 连云港网站关键字优化市场网站右下角图片广告代码
  • 温州自助模板建站买国外空间哪个网站好
  • 网站投票怎么做某景区网站建设策划书
  • 网站建设期末试题天猫店铺申请条件及费用
  • 石家庄哪里能做门户网站的想学设计师首先要学什么
  • 番禺高端网站建设网站优化 图片
  • 安徽制作网站专业公司wordpress登录可见
  • 南通企业网站公司策划是做什么的
  • 在线销售型网站产品蓬莱做网站那家好
  • 网站同时使用asp php钢结构招聘网最新招聘信息
  • 微网站是免费的吗页面跳转自动更新
  • 怎么给网站做链接屏蔽微信网址
  • 青岛大型门户网站建设推广南京房地产网站建设
  • 张家口北京网站建设打不开网站怎么办
  • 郑州网站建设费用滴道网站建设
  • 网站开发自学网校园文化建设
  • 东莞网站建设效果淘宝网网页版登录官网登录
  • 怎么从网站知道谁做的公司网站网页设计
  • 厦门无忧网站建设有限公司六安网络推广
  • 如何做网站咨询wordpress 上传类型
  • 上海做外贸建站的专业公司pc端自定义页设计与制作
  • 网站设计欣赏移动h5页面制作工具 软件
  • 淘宝网站怎么做的苏州建网站要多少钱