在Java中检索MongoDB的长值



我有一堆字段存储在MongoDB作为长。当我查询我的集合时,它们作为long返回。但是,当我对一个新集合执行MapReduce并从中检索数据时,它会作为浮点数返回。似乎尴尬的是,必须将所有内容转换为浮点数,然后抓住长值-有更好的方法吗?

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和所有的数值(除了日期)都是long:

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;}";

如果您将发射器更改为发出long,则可以使用以下命令:

emit(this.user_id, { friends_count: NumberLong(this.friends_count), /* ... */ });
这是奇怪的MongoDB不会保持现有的类型,虽然。确保原始对象上字段的类型确实是long(您提供的对象中有浮点数,我假设这是一个示例输出对象,而不是输入)。

相关内容

  • 没有找到相关文章

最新更新