mongoexport导出查询结果报错query非有效JSON问题排查
问题根因
mongoexport的--query参数仅接受符合标准JSON格式的筛选条件对象,不支持传入Mongo Shell中写的find().sort()这类完整链式调用语句。你把整段Shell查询代码直接塞给了--query参数,工具尝试把这段文本解析为JSON时,读到find(里的字符就触发了格式错误。- 你原命令还有几个不符合
mongoexport参数规则的问题:- 指定返回字段、排序逻辑有独立的对应参数,不能写在
--query里 - JSON格式里不能直接写JS风格的正则字面量(比如你写的
/^A/i),要使用MongoDB支持的正则JSON写法 - 命令行中
$开头的内容容易被Shell识别为环境变量转义,直接用双引号包裹很容易出现内容被篡改的问题
- 指定返回字段、排序逻辑有独立的对应参数,不能写在
修复后的命令
先把你原查询的逻辑拆分对应到正确的参数上:
- 筛选逻辑:displayName以A开头(不区分大小写)、displayName以es结尾、friendsCount小于25 → 传给
-q/--query - 返回字段:displayName、followersCount、friendsCount,不需要默认返回的
_id→ 传给--fields加--noId - 排序规则:按displayName字段倒序 → 传给
--sort
修正后的可直接执行的命令(Linux/macOS终端适用):
mongoexport --db cw2 --collection cl \ -q '{ "$and": [ {"displayName": {"$regex": "^A", "$options": "i"}}, {"displayName": {"$regex": "es$"}}, {"friendsCount": {"$lt": 25}} ] }' \ --fields displayName,followersCount,friendsCount \ --sort '{"displayName": -1}' \ --noId \ --out=data/cw2q2.json
如果你用的是Windows CMD终端,单引号不被识别,把所有单引号换成双引号,同时把JSON内部的双引号转义为\"即可,示例:
mongoexport --db cw2 --collection cl -q "{ \"$and\": [ {\"displayName\": {\"$regex\": \"^A\", \"$options\": \"i\"}}, {\"displayName\": {\"$regex\": \"es$\"}}, {\"friendsCount\": {\"$lt\": 25}} ] }" --fields displayName,followersCount,friendsCount --sort "{\"displayName\": -1}" --noId --out=data/cw2q2.json
额外注意
- 执行命令前先确认
data目录已经存在,mongoexport不会自动创建不存在的上级目录,会触发路径不存在的报错 - 报错里开头的那串数字是你传入的查询字符串的ASCII码值,解码后就是你写的整段find语句,解析时碰到的第一个非法字符是find中的字母i,才会出现
invalid character 'i' in literal false (expecting 'a')的提示,本质就是传入的query内容不是合法JSON。
内容的提问来源于stack exchange,提问作者ViB
相关产品推荐
相关产品推荐

