【问题标题】:Query for Mongoexport查询 Mongoexport
【发布时间】:2016-10-07 21:12:40
【问题描述】:

我想根据查询导出集合投影,我用来执行 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 格式,但我真的不知道如何转换它...

【问题讨论】:

    标签: mongodb mongoexport


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      就我而言,它是通过在内部查询中使用单引号(')来解决的,并用双引号(“)将整个查询括起来,例如

      ./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
      

      【讨论】:

        【解决方案3】:

        我在字符串前使用了\

        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
        

        【讨论】:

          【解决方案4】:

          您似乎在$in 运算符之后缺少:。尝试使用:

          'run.session.device._id':{$in:['value1','value2']}
          

          【讨论】:

          • 感谢您的回答,我已经尝试使用 ':' 但它仍然给我同样的错误:(
          猜你喜欢
          • 2014-02-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-13
          • 2023-03-23
          • 1970-01-01
          相关资源
          最近更新 更多