我想根据查询导出集合投影,我用来执行mongoexport的语法是:
./mongoexport -d myDB -c myCollection -q "myQuery" -o output.json
我曾尝试在mongo shell中使用此过滤器,但我无法正确格式化,因此代表“myQuery”是合法的:
{
'run.session.game._id':'gameId1',
'run.session.device._id':{$in:['value1','value2']},
'createdAt':{
$gte:ISODate('2016-06-05T15:14:22.163Z'),
$lte:ISODate('2017-06-05T15:14:22.163Z')
}
}
如果我只有第一个过滤器,它可以工作,但是一旦我在第2行输入设备ID,我就会收到错误。 错误消息如下所示:
2016-10-07T22:54:02.333+0200
error validating settings: query '[123 39 114 117 110 46 115 101 115
115 105 111 110 46 103 97 109 101 46 95 105 100 39 32 58 32 39 90 71
120 88 109 104 100 66 69 83 39 44 39 114 117 110 46 115 101 115 115 105
111 110 46 100 101 118 105 99 101 46 95 105 100 39 58 123 58 91 79 98
106 101 99 116 73 100 40 39 101 104 55 73 77 117 112 107 52 112 39 41
93 125 125]' is not valid JSON: invalid character ':' looking for
beginning of object key string
2016-10-07T22:54:02.333+0200 try 'mongoexport --help' for more
information
请帮助:( 我知道查询必须采用严格的JSON格式,但我真的不知道如何转换它...
答案 0 :(得分:1)
来自mongoexport documentation:
您必须将查询括在单引号中(例如'),以确保它不会与您的shell环境进行交互。
请尝试以这种方式切换"
和'
:
./mongoexport -d myDB -c myCollection -q '{
"run.session.game._id":"gameId1",
"run.session.device._id":{$in:["value1","value2"]},
"createdAt":{
$gte:ISODate("2016-06-05T15:14:22.163Z"),
$lte:ISODate("2017-06-05T15:14:22.163Z")
}
}' -o output.json
答案 1 :(得分:1)
对于我来说,它是通过在内部查询中使用单引号(')来解决的,并用双引号(“)将整个查询括起来,例如
./mongoexport -d myDB -c myCollection --query "{'run.session.game._id':'gameId1','run.session.device._id':{$in:['value1','value2']},'createdAt':{$gte:ISODate('2016-06-05T15:14:22.163Z'),$lte:ISODate('2017-06-05T15:14:22.163Z')}}" -o output.json
答案 2 :(得分:0)
在:
运算符之后,您似乎错过了$in
。尝试使用:
'run.session.device._id':{$in:['value1','value2']}
答案 3 :(得分:0)
我在字符串前使用了\
:
mongoexport --db=database --collection=test --query="{ \ "Timestamp\": { \ "$gte \ ": \ "2014-01-01T00:00:00 \ ", \ "$lt \ ": \ "2020-10-20T00:00:00 \ "}}" --type=csv --fields=Timestamp --out=C:\Users\Documents\test.csv