Javascript-如何在mongoDB中映射文档而不减少它?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javascript-如何在mongoDB中映射文档而不减少它?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2664字,纯文字阅读大概需要4分钟。
内容图文
在mongoDB mapreduce中,我有导致某些文档被映射但未缩减的代码.我将其简化为一个非常简单的示例
m = function(){
var a = this.visit_last_action_time.getFullYear()
var b = this.visit_last_action_time.getMonth()
var c = this.visit_last_action_time.getDate()
var key = new Date(a,b,c)
emit(key,{greeting:'hi'})
}
r = function(key,values){
var sum = 0;
for (index in values) {
sum ++
}
return {count: sum}
}
result = db.runCommand({
"mapreduce" : "piwik",
"map" : m,
"reduce" : r,
"out" : "temp2",
limit:500})
结果是
{
"result" : "temp2",
"timeMillis" : 1461,
"counts" : {
"input" : 500,
"emit" : 500,
"reduce" : 13,
"output" : 20
},
"ok" : 1
}
> db.temp2.find({})
{ "_id" : ISODate("2011-01-28T00:00:00Z"), "value" : { "count" : 2 } }
{ "_id" : ISODate("2011-01-29T00:00:00Z"), "value" : { "greeting" : "hi" } }
{ "_id" : ISODate("2011-07-11T00:00:00Z"), "value" : { "greeting" : "hi" } }
{ "_id" : ISODate("2011-07-13T00:00:00Z"), "value" : { "greeting" : "hi" } }
{ "_id" : ISODate("2011-07-15T00:00:00Z"), "value" : { "count" : 2 } }
{ "_id" : ISODate("2011-07-16T00:00:00Z"), "value" : { "count" : 7 } }
{ "_id" : ISODate("2011-07-17T00:00:00Z"), "value" : { "count" : 39 } }
{ "_id" : ISODate("2011-07-18T00:00:00Z"), "value" : { "count" : 172 } }
{ "_id" : ISODate("2011-07-19T00:00:00Z"), "value" : { "count" : 248 } }
{ "_id" : ISODate("2011-09-23T00:00:00Z"), "value" : { "count" : 3 } }
{ "_id" : ISODate("2011-09-24T00:00:00Z"), "value" : { "count" : 5 } }
{ "_id" : ISODate("2011-09-25T00:00:00Z"), "value" : { "count" : 4 } }
{ "_id" : ISODate("2011-09-26T00:00:00Z"), "value" : { "count" : 2 } }
{ "_id" : ISODate("2011-09-27T00:00:00Z"), "value" : { "count" : 2 } }
{ "_id" : ISODate("2011-09-28T00:00:00Z"), "value" : { "count" : 5 } }
{ "_id" : ISODate("2011-10-13T00:00:00Z"), "value" : { "greeting" : "hi" } }
{ "_id" : ISODate("2011-10-14T00:00:00Z"), "value" : { "greeting" : "hi" } }
{ "_id" : ISODate("2011-10-15T00:00:00Z"), "value" : { "greeting" : "hi" } }
{ "_id" : ISODate("2011-10-18T00:00:00Z"), "value" : { "greeting" : "hi" } }
{ "_id" : ISODate("2011-10-19T00:00:00Z"), "value" : { "count" : 2 } }
从“嗨”中您可以看到,这里发生了一些奇怪的事情.
如何减少文档数量?
我正在使用mongo 2.0
解决方法:
How is it possible that documents are not getting reduced?
只有在需要将两个或多个值简化为单个值时,才会调用Reduce.
您可以在函数的签名中看到这一点. reduce()接受一个值数组并返回一个值.
从map发出的值的结构应与reduce所返回的值相同.
就您而言,您的代码违反了以下规则:reduce(key,[a])=>一种.
您需要更改两件事:
m = ...
emit(key,{count:1})
}
r = function(key,values){
var sum = 0;
for (index in values) {
sum += values[index].count
}
return {count: sum}
}
请注意,发射值的结构与减小的值如何相同.
内容总结
以上是互联网集市为您收集整理的Javascript-如何在mongoDB中映射文档而不减少它?全部内容,希望文章能够帮你解决Javascript-如何在mongoDB中映射文档而不减少它?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。