我有一堆字段存储在MongoDB中作为Longs。当我查询我的集合时,它们将作为Longs返回。但是,当我将MapReduce执行到新集合并从那里检索数据时,它会以浮动状态返回。将所有内容都转换为浮动然后获取Long值似乎很尴尬 - 有更好的方法吗?
A sample object:
{ "_id" : 2836.0 , "value" : { "friends_count" : 788.0 , "followers_count" : 910.0 , "tweet_count" : 7791.0 , "screen_name" : "zzzzz" , "collected_at" : { "$date" : "2014-01-01T14:47:41.000Z"}}}
这是我的map和reduce函数:我需要id和所有数值(除了date)都是Longs:
String map = "function() { " +
"emit( this.user_id, { 'friends_count': this.friends_count, 'followers_count': this.followers_count, " +
"'tweet_count': this.tweet_count, 'screen_name': this.screen_name, 'collected_at': this.collected_at} );}";
String reduce = "function(key, values) { " +
"var retval = values[0]; " +
"var latest = 0; "+
"for(var i in values){ " +
"if(values[i].collected_at > latest) { " +
"latest = values[i].collected_at; "+
"retval = values[i]; "+
" }} "+
"return retval;}";
答案 0 :(得分:0)
如果您通过使用以下内容将发射器更改为发射长度,则可以执行此操作:
emit(this.user_id, { friends_count: NumberLong(this.friends_count), /* ... */ });
但是,MongoDB不会保留现有的类型,这很奇怪。确保原始对象上的字段类型确实是long
(您提供的对象浮动在其中,我假设它是一个示例输出对象而不是输入)。