天天看点

踩坑——Mongodb mongoexport -q 的使用踩坑——Mongodb mongoexport -q 的使用

@羲凡——只为了更好的活着

踩坑——Mongodb mongoexport -q 的使用

先说干货,使用mongoexport -q 需要注意以下两点

1、-q 后面的参数一定要写成标准的json格式,如果怕自己写的不对,找一个json解析工具验证一下

2、一定要将json用单引号包起来,放在 -q的后面,切记切记

成功样例如下:

mongoexport --authenticationDatabase admin --host 10.10.227.227 --port 30000 \
-q '{"channel":{ "$in":["210020","210032"]},"timestamp":{"$gte":1596696003149,"$lte":1596696003149}}' \
-u admin -p 123456 --db eventcenter --collection eventCenter \
--type json --out /opt/bigData/user/aaron/eventcenter.json
           

-------------------------以下是我的踩坑经历,有兴趣看没兴趣过-------------------------

-------------------------以下是我的踩坑经历,有兴趣看没兴趣过-------------------------

-------------------------以下是我的踩坑经历,有兴趣看没兴趣过-------------------------

先登录哈(如果是主从模式,一定要用主节点的IP哦)

mongo --host 10.10.227.227 --port 30000 -u admin -p 123456
           

先来一个能在命令行中能直接执行的样例,会用的mongodb的小伙伴应该都懂

第1波,现在我把find中的内容直接放在 monoexport 的 -q 后面

mongoexport --authenticationDatabase admin --host 10.10.227.227 --port 30000 \
-q {channel:{$in:["210020","210032"]},timestamp:{$gte:1596696003149,$lte:1596696003149}} \
-u admin -p 123456 --db eventcenter --collection eventCenter \
--type json --out /opt/bigData/user/aaron/eventcenter.json
           

第一次执行,就会报错如下,

2020-08-17T14:35:34.663+0800    too many positional arguments: [:[210020,210032]},timestamp::1596696003149 :[210020,210032]},timestamp::1596696003149]
2020-08-17T14:35:34.663+0800    try 'mongoexport --help' for more information
           

第2波,网上查一波发现说 -q 后面跟的是json,我纳闷了,我这不是json么?命令行里面你都能执行,我找一个json网页解析了一下确实不是标准的json,修改一波后如下

mongoexport --authenticationDatabase admin --host 10.10.227.227 --port 30000 \
-q {"channel":{ "$in":["210020","210032"]},"timestamp":{"$gte":1596696003149,"$lte":1596696003149}} \
-u admin -p 123456 --db eventcenter --collection eventCenter \
--type json --out /opt/bigData/user/aaron/eventcenter.json
           

第二次执行,还报同样的错误

2020-08-17T14:42:46.258+0800    too many positional arguments: [:[210020,210032]},timestamp::1596696003149} :[210020,210032]},timestamp::1596696003149}]
2020-08-17T14:42:46.258+0800    try 'mongoexport --help' for more information
           

第3波,是不是 -q 后面的参数要用双引号引起来,添加双引号后如下

mongoexport --authenticationDatabase admin --host 10.10.227.227 --port 30000 \
-q "{"channel":{ "$in":["210020","210032"]},"timestamp":{"$gte":1596696003149,"$lte":1596696003149}}" \
-u admin -p 123456 --db eventcenter --collection eventCenter \
--type json --out /opt/bigData/user/aaron/eventcenter.json
           

第三次执行,有新的报错了,开心史密达

2020-08-17T14:47:19.597+0800    error validating settings: query '[123 99 104 97 110 110 101 108 58 123 32 58 91 50 49 48 48 50 48 44 50 49 48 48 51 50 93 125 44 116 105 109 101 115 116 97 109 112 58 123 58 49 53 5754 54 57 54 48 48 51 49 52 57 44 58 49 53 57 54 54 57 54 48 48 51 49 52 57 125 125]' is not valid JSON: invalid character ':' looking for beginning of object key string
2020-08-17T14:47:19.597+0800    try 'mongoexport --help' for more information
           

第4波,是不是 -q 后面的参数外面用双引号了,我把里面改成单引号试一下

mongoexport --authenticationDatabase admin --host 10.10.227.227 --port 30000 \
-q "{'channel':{ '$in':['210020','210032']},'timestamp':{'$gte':1596696003149,'$lte':1596696003149}}" \
-u admin -p 123456 --db eventcenter --collection eventCenter \
--type json --out /opt/bigData/user/aaron/eventcenter.json
           

第四次执行,没有报错,但是条数是零,我怀疑自己了,我这个查询条件肯定是有一条数据的。看到下面的时候我内心是奔溃的,一万个草泥马在奔腾

2020-08-17T14:48:16.013+0800    connected to: 10.10.227.227:30000
2020-08-17T14:48:16.021+0800    exported 0 records
           

.

.

.

第N波,将json中的字段用双引号,外面用单引号将json包起来

mongoexport --authenticationDatabase admin --host 10.10.227.227 --port 30000 \
-q '{"channel":{ "$in":["210020","210032"]},"timestamp":{"$gte":1596696003149,"$lte":1596696003149}}' \
-u admin -p [email protected] --db eventcenter --collection eventCenter \
--type json --out /opt/bigData/user/aaron/eventcenter.json
           

第N次执行,正确

2020-08-17T14:55:42.703+0800    connected to: 10.10.227.227:30000
2020-08-17T14:55:42.709+0800    exported 1 record
           

===================================================================

@羲凡——只为了更好的活着

若对博客中有任何问题,欢迎留言交流