要不是因为我,你能有今天?
要不是我伤害你,你能成长?
需求
产品需要分析达人文章的标签,需要把2019年1月1号到现在的标签,从mongo导出来,导出格式为csv,查询条件如下:
1 | db.content_medium_hismatch.find({"content_type_id":"28","update_time":{"$gte":1546272000000},"is_delete":0}, {"content_id":1,"content_tags":1}); |
操作
使用MongoDB
中的mongoexport
命令
1 | mongoexport --help |
操作命令如下:
1 | /usr/local/mongodb/bin/mongoexport --port 29001 --host=localhost -user=*** --password=***** --authenticationDatabase=**** --db=db --collection=collection --query='{"content_type_id":"28","update_time":{"$gte":1546272000000},"is_delete":0}, {"content_id":1,"content_tags":1}' --type=csv --out=***.csv |
1 | 2019-05-17T13:18:52.325+0800 error validating settings: query '[123 34 99 111 110 116 101 110 116 95 116 121 112 101 95 105 100 34 58 34 50 56 34 44 34 117 112 100 97 116 101 95 116 105 109 101 34 58 123 34 36 103 116 101 34 58 49 53 52 54 50 55 50 48 48 48 48 48 48 125 44 34 105 115 95 100 101 108 101 116 101 34 58 48 125 44 32 123 34 99 111 110 116 101 110 116 95 105 100 34 58 49 44 34 99 111 110 116 101 110 116 95 116 97 103 115 34 58 49 125]' is not valid JSON: invalid character ',' after top-level value |
初步判断是导出CSV文件
中需要的逗号(,)
分割。字段发生错误。语句添加–fields _id,content_id,content_tags
1 | /usr/local/mongodb/bin/mongoexport --port 29001 --host=localhost -user=*** --password=***** --authenticationDatabase=**** --db=db --collection=collection --query='{"content_type_id":"28","update_time":{"$gte":1546272000000},"is_delete":0}, {"content_id":1,"content_tags":1}' --type=csv --fields _id,content_id,content_tags --out=***.csv |
1 | `2019-05-17T13:18:54.325+0800 error validating settings: query '[123 34 99 111 110 116 101 110 116 95 116 121 112 101 95 105 100 34 58 34 50 56 34 44 34 117 112 100 97 116 101 95 116 105 109 101 34 58 123 34 36 103 116 101 34 58 49 53 52 54 50 55 50 48 48 48 48 48 48 125 44 34 105 115 95 100 101 108 101 116 101 34 58 48 125 44 32 123 34 99 111 110 116 101 110 116 95 105 100 34 58 49 44 34 99 111 110 116 101 110 116 95 116 97 103 115 34 58 49 125]' is not valid JSON: invalid character ',' after top-level value |
开始排查为什么还继续报错。使用 mongo shell
连接到mongodb中查询发现是能获取到数据的。去掉–query 条件之后再执行一次发现是没问题
1 | /usr/local/mongodb/bin/mongoexport --port 29001 --host=localhost -user=*** --password=***** --authenticationDatabase=**** --db=db --collection=collection --type=csv --fields _id,content_id,content_tags --out=***.csv |
1 | 2019-05-17T13:24:18.176+0800 connected to: localhost:29001 |
就能确定这么执行是没有问题。重点排查--query条件
。根据之前报错
1 | 2019-05-17T13:25:56.341+0800 error validating settings: query '[123 99 111 110 116 101 110 116 95 116 121 112 101 95 105 100 58 50 56 44 117 112 100 97 116 101 95 116 105 109 101 58 123 36 103 116 101 58 49 53 52 54 50 55 50 48 48 48 48 48 48 125 44 105 115 95 100 101 108 101 116 101 58 48 125 44 123 99 111 110 116 101 110 116 95 105 100 58 49 44 99 111 110 116 101 110 116 95 116 97 103 115 58 49 125]' is not valid JSON: invalid character ',' after top-level value |
发现一个点invalid character ',' after top-level value
中提示有逗号,
的问题,排查一下--query条件
发现有'{"content_type_id":"28","update_time":{"$gte":1546272000000},"is_delete":0}, {"content_id":1,"content_tags":1}'
有一个逗号,
去掉逗号,
和后面的逗号之后的条件
发现执行成功
1 | /usr/local/mongodb/bin/mongoexport --port 29001 --host=localhost -user=*** --password=***** --authenticationDatabase=**** --db=db --collection=collection --query='{"content_type_id":"28","update_time":{"$gte":1546272000000},"is_delete":0}' --type=csv --fields _id,content_id,content_tags --out=***.csv |
1 | 2019-05-17T13:41:33.068+0800 connected to: localhost:29001 |
和开发确认一下这个条件能否却掉,开发确认可以去掉。
总结
mongoexport
在执行有条件的导出文件,--query
条件要写在一个花括号{}
里面,如果要有两个花括号{}
的条件,中间用逗号,
分割,这样是不行的。