我使用MongoDB来汇总一些事务,但它返回了错误的值。
所有数字都存储为long - 在mongo shell中,它们显示为NumberLong(" 5")
我花了一些时间查看我的数据,认为我错误地收集了它,但是我现在意识到MongoDB没有正确地汇总这些值。
我的测试数据在这里:http://pastebin.com/3LNQLFtR
我要查找的实际值是165516011841
,但是当我在MongoDB中执行$ sum聚合时,它会错误地报告1641757914055
。
这是我的汇总:
{$project: {"value": '$o.v'}}
{$group: {"_id":1, "total":{$sum: "$value"}}}
顺便说一句,Excel也有同样的问题。正确加总的唯一方法是Int64。
这里要求的是一个示例文档: http://pastebin.com/BD4RuPyg
编辑,看来我的数据(和MongoDB)是正确的。我试图在此处达到总收到价值:https://blockchain.info/address/1PEDJAibfNetJzM289oXsW1qLAgjYDjLgN
然而,看起来我的数字更准确地说是该特定值的营业额,因此更好地反映了我想要呈现的内容。
答案 0 :(得分:1)
发现您的问题非常有趣,并决定对您在此处提供的数据http://pastebin.com/3LNQLFtR进行一些测试。页面上有两个文本区域我使用了第一个中的数据,其中包含26926条记录。
其次我将它插入mongo集合中。用一个简单的
一份提交的文件。
db.testLong1.insert({v:NumberLong(499689200) })
然后运行一个组
查询,几乎和你一样。
db.testLong1.aggregate({$project: {"value": "$v"}}, {$group:{"_id":1, "total":{$sum:"$value"}}})
最后,我将数据插入到SQL Server数据库中。再简单一个 田野表。
create table t1(v bigint not null)
插入所有带有多个插入状态的记录,如下所示 一个
insert t1 values('241025537')
然后只运行此查询以获取值的总和
select sum(v) from t1
所有工具都给了我相同的结果,即1641757914055
你怎么知道这是错的?
我一直在使用这些工具很长时间,从未听说过或经历过这样的问题。所以我倾向于认为它不是mongo会返回错误的结果,而是系统中的一个错误让你相信这一点。
希望它有所帮助!
答案 1 :(得分:0)
MongoDB提供的答案是正确的,问题是证据不正确:
https://blockchain.info/address/1PEDJAibfNetJzM289oXsW1qLAgjYDjLgN
该页面上收到的总数应为1641757914055而非165516011841。