mongoimport拒绝NumberDecimal类型

时间:2017-01-26 19:35:00

标签: mongodb mongodb-query

来自v.3.4的Mongodb支持NumberDecimal

我有MongoDB服务器版本: 3.4.1 ,但是当我执行 mongoimport shell命令时出现错误:

  

失败:错误处理文档#7:无效字符' D'在文字NumberInt或NumberLong中(期待'我' L')


我的json:

{"c":"7E474601-B511-4AD9-B2B8-7E61807F9673","n":"n1","v":NumberDecimal("95")}

普通插入执行正常,所以这是mongoimort问题。

db.aaa.insert({"c":"7E474601-B511-4AD9-B2B8-7E61807F9673","n":"n1","v":NumberDecimal("95")})
WriteResult({ "nInserted" : 1 })

为什么?你能救我吗?

2 个答案:

答案 0 :(得分:4)

找出正确的extended json格式的一个技巧是在集合上使用mongoexport实用程序来查看MongoDB本身如何发布json。

在这种情况下,以下内容应该有效:

{"c":"7E474601-B511-4AD9-B2B8-7E61807F9673","n":"n1","v":{"$numberDecimal":"95"}}

我使用服务器版本3.4.1的mongoimport进行了测试,并正确导入了numberDecimal。

答案 1 :(得分:1)

NumberDecimal("95")不是有效的JSON代表。它应该是

{"c":"7E474601-B511-4AD9-B2B8-7E61807F9673","n":"n1","v":95}

它适用于mongo shell,因为shell是一个javascript解释器,它将NumberDecimal视为有效的数据类型。

如果您需要NumberDecimal数据类型,则需要使用驱动程序或mongo shell。

形成一个bash shell,你可以运行这个简单的脚本:

for i in `cat aaa.json`
do
 mongo --quiet --eval "db.aaa.insert($i)"
done

请注意,这是逐行插入的,效率不高。