mongoexport多条件查询报错及日期变量传递问题求助
mongoexport多条件导出报错及日期变量传递解决方案
一、"error parsing query as Extended JSON" 错误解决
错误原因
Studio 3T等GUI工具支持MongoDB Shell语法(比如ISODate("2024-02-13T00:00:01.000+0000")),但mongoexport要求严格遵循Extended JSON格式,不能直接使用Shell中的函数调用语法,否则会触发JSON解析错误。
修正方案
将查询中的ISODate("日期字符串")替换为Extended JSON的日期格式{"$date": "ISO标准日期字符串"},日期字符串需采用YYYY-MM-DDTHH:mm:ss.sssZ格式(Z代表UTC时区)。
关键片段对比
报错的查询片段:
"firstInsertTimestamp" : { "$gt" : ISODate("2024-02-13T00:00:01.000+0000")}
修正后的查询片段:
"firstInsertTimestamp" :{"$gt" : {"$date": "2024-02-14T00:00:00.000Z"}}
完整修正后的可执行命令:
/u01/ba/mongo/mongoexport --host ui-west-prod-mongodb-ent1-vm-01.az.3pc.att.com:17345 --authenticationDatabase admin -u 'm425@ub5@ub.com' -p 'prd@23' --readPreference secondaryPreferred --db entaction --collection statuses --ssl --sslCAFile /u01/a1_cert.pub --sslAllowInvalidCertificates --type=csv -f "_id, tyId,Uid,uan,taskName,InsertTimestamp,UpdateTimestamp,results,status" -q '{"taskName" : {"$in": ["RT_WAP", "LI_WAP", "TI_SWAP"]}, "results" :{"$in": ["TIMEOUT","SUCCEEDED","FAILURE", "INPROGRESS", "SUCCESS"]}, "firstInsertTimestamp" :{"$gt" : {"$date": "2024-02-14T00:00:00.000Z"}}}' -o /u01/ent1_session_stats.csv
二、日期变量传递实现
硬编码日期可正常执行,但直接在查询中使用Shell变量会因引号转义问题失效,可通过以下两种方式实现变量传递:
方式1:拼接查询字符串(推荐)
先定义日期变量,再将变量嵌入查询字符串中,注意引号转义:
# 定义日期变量(需符合YYYY-MM-DDTHH:mm:ss.sssZ格式) START_DATE="2024-02-14T00:00:00.000Z" # 拼接查询语句,用双引号包裹查询内容,变量直接替换 QUERY="{\"taskName\": {\"$in\": [\"RT_WAP\", \"LI_WAP\", \"TI_SWAP\"]}, \"results\": {\"$in\": [\"TIMEOUT\",\"SUCCEEDED\",\"FAILURE\", \"INPROGRESS\", \"SUCCESS\"]}, \"firstInsertTimestamp\": {\"$gt\": {\"$date\": \"$START_DATE\"}}}" # 执行mongoexport命令 /u01/ba/mongo/mongoexport --host ui-west-prod-mongodb-ent1-vm-01.az.3pc.att.com:17345 --authenticationDatabase admin -u 'm425@ub5@ub.com' -p 'prd@23' --readPreference secondaryPreferred --db entaction --collection statuses --ssl --sslCAFile /u01/a1_cert.pub --sslAllowInvalidCertificates --type=csv -f "_id, tyId,Uid,uan,taskName,InsertTimestamp,UpdateTimestamp,results,status" -q "$QUERY" -o /u01/ent1_session_stats.csv
方式2:单引号嵌套变量
通过单引号拼接固定部分,变量部分用双引号嵌入:
START_DATE="2024-02-14T00:00:00.000Z" # 单引号包裹固定JSON结构,变量部分用'"$START_DATE"'拼接 QUERY='{"taskName": {"$in": ["RT_WAP", "LI_WAP", "TI_SWAP"]}, "results": {"$in": ["TIMEOUT","SUCCEEDED","FAILURE", "INPROGRESS", "SUCCESS"]}, "firstInsertTimestamp": {"$gt": {"$date": "'"$START_DATE"'"}}}' /u01/ba/mongo/mongoexport --host ui-west-prod-mongodb-ent1-vm-01.az.3pc.att.com:17345 --authenticationDatabase admin -u 'm425@ub5@ub.com' -p 'prd@23' --readPreference secondaryPreferred --db entaction --collection statuses --ssl --sslCAFile /u01/a1_cert.pub --sslAllowInvalidCertificates --type=csv -f "_id, tyId,Uid,uan,taskName,InsertTimestamp,UpdateTimestamp,results,status" -q "$QUERY" -o /u01/ent1_session_stats.csv
内容的提问来源于stack exchange,提问作者singhoracledba2023 singh
相关产品推荐
相关产品推荐

