来自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 })
为什么?你能救我吗?
答案 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
请注意,这是逐行插入的,效率不高。