如何使用NumberLong
将mongoimport
导入MongoDB?
不幸的是,json文件中的这些条目会导致错误:
{"_id": NumberLong(123)}
{"_id": NumberLong("123")}
结果:
Mon Nov 12 14:41:46 Assertion: 10340:Failure parsing JSON string near: "_id": Num
0xaf6b21 0xabe459 0xabe5dc 0x7b93ad 0x56160d 0x5630f4 0xabb412 0x5546bc 0x7f961b79776d 0x554549
mongoimport(_ZN5mongo15printStackTraceERSo+0x21) [0xaf6b21]
mongoimport(_ZN5mongo11msgassertedEiPKc+0x99) [0xabe459]
mongoimport() [0xabe5dc]
mongoimport(_ZN5mongo8fromjsonEPKcPi+0x56d) [0x7b93ad]
mongoimport(_ZN6Import8parseRowEPSiRN5mongo7BSONObjERi+0xa2d) [0x56160d]
mongoimport(_ZN6Import3runEv+0x1314) [0x5630f4]
mongoimport(_ZN5mongo4Tool4mainEiPPc+0x1712) [0xabb412]
mongoimport(main+0x2c) [0x5546bc]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed) [0x7f961b79776d]
mongoimport(__gxx_personality_v0+0x419) [0x554549]
Mon Nov 12 14:41:46 exception:BSON representation of supplied JSON is too large: Failure parsing JSON string near: "_id": Num
Mon Nov 12 14:41:46
Mon Nov 12 14:41:46 imported 0 objects
Mon Nov 12 14:41:46 ERROR: encountered 1 error
答案 0 :(得分:3)
NumberLong只是一个Javascript Shell输出,用于显示MongoDB存储了64位整数。要导入,您只需使用:
{ "_id": 123 }
它将自动使用正常数字(int32)或者如果它太大,则使用NumberLong(int64)。对于MongoDB中的操作,无论是存储为in32还是存储为int64都无关紧要。
答案 1 :(得分:0)
如果您使用mongodump
,则需要使用mongorestore
。我不小心在用mongoimport
生成的文件上输入了mongodump
。它会失败并说出这样的话:
Wed Jan 9 16:47:23 exception:BSON representation of supplied JSON is too large: Failure parsing JSON string near: <h2></h2>
Wed Jan 9 16:47:23
Wed Jan 9 16:47:23 Assertion: 10340:Failure parsing JSON string near: <h3>The He
0xafda51 0xac5399 0xac551c 0x7bbecd 0x561a8d 0x563574 0xac1b8b 0x554b3c 0x3b9801ecdd 0x5549c9
mongoimport(_ZN5mongo15printStackTraceERSo+0x21) [0xafda51]
mongoimport(_ZN5mongo11msgassertedEiPKc+0x99) [0xac5399]
mongoimport() [0xac551c]
mongoimport(_ZN5mongo8fromjsonEPKcPi+0x56d) [0x7bbecd]
mongoimport(_ZN6Import8parseRowEPSiRN5mongo7BSONObjERi+0xa2d) [0x561a8d]
mongoimport(_ZN6Import3runEv+0x1314) [0x563574]
mongoimport(_ZN5mongo4Tool4mainEiPPc+0x16cb) [0xac1b8b]
mongoimport(main+0x2c) [0x554b3c]
/lib64/libc.so.6(__libc_start_main+0xfd) [0x3b9801ecdd]
mongoimport(_
_gxx_personality_v0+0x419) [0x5549c9]
不是您期望的响应,因此请小心如何将数据移入/移出Mongo。
答案 2 :(得分:0)
这是旧的,但定位良好:)
我有一些我绝对无法导入的mongo数据。 ISODate和NumberLong必须替换为他们的mongo内部等价物。所以我这样做了:
perl -ape 'BEGIN {$\=""} s/ISODate\((.*)\)/ { "\$date": $1 }/g; s/NumberLong\(\s*\"?(\d+)\"?\s*\)/ { "\$numberLong" : \"$1\" }/g; chop' data.json > data2.json
这被吞没了没有问题:
mongoimport --db mydb --collection mycoll --file data2.json --jsonArray