mongoimport unable to import $numberLong
A collection with NumberLong
type data as follows :
> db.hc_whois.findOne();
{
"_id" : NumberLong(3000001),
"startIpInLong" : NumberLong(1543503872),
"endIpInLong" : NumberLong(1544552447),
"name" : "ap-net-1",
//...
}
Export it with mongoexport
:
$ mongoexport -d mydb -c hc_whois -o whois.json
{
"_id" : { "$numberLong" : "3000001" },
"startIpInLong" : { "$numberLong" : "1543503872" },
"endIpInLong" : { "$numberLong" : "1544552447"
}
1. Problem
Copy the exported data whois.json
to another server, and import it with mongoexport
.
$ mongoimport -d mydb -c hc_whois --file whois.json
The imported data look weird, an extra $numberLong
is inserted, and the long value is unable to search anymore.
> db.hc_whois.findOne();
{
"_id" : {
"$numberLong" : "3000001"
},
"startIpInLong" : {
"$numberLong" : "1543503872"
},
"endIpInLong" : {
"$numberLong" : "1544552447"
},
"name" : "ap-net-1",
//...
}
Why mongoimport
didn’t convert the $numberLong
into long value?
2. Solution
After a quick check, find out that server1 is using MongoDB v2.6.4 to export the data, and try to import the data into a server2, where MongoDB v2.4.3 is installed.
To fix it, make sure both server1 and server2 are using the same MongoDB version, look like the exported $numberLong
value is supported in version 2.6.x only.
1. Refer to this guide to upgrade MongoDB to 2.6, it’s simple, just stop the MongoDB process and replace the $mongo\bin
folder with the latest.
2. After server2 is upgraded to MongoDB 2.6, try importing it again.
$ mongoimport -d mydb -c hc_whois --file whois.json
> db.hc_whois.findOne();
{
"_id" : 3000001,
"startIpInLong" : 1543503872,
"endIpInLong" : 1544552447,
"name" : "ap-net-1"
//...
}
Done.
2.6.2 is importing your numbers as integers, not longs. Which is better than importing the “$numberLong” objects, but still not expected behavior. You should use mongodump and mongorestore instead.