将 mongoexport 与 --query 一起用于 ISODate

Use mongoexport with a --query for ISODate

我有此查询,但出现语法错误:意外标识符

mongoexport --db ium --collection events \
  --query 'db.events.find({'created_at' : {
      $gte: ISODate("2016-03-01T00:00:00.001Z"),
      $lte: ISODate("2016-03-29T23:59:59:59.000Z")
    }, 
    "name" : "UPDATE_SUCCESS"})' \
 --out guille1_test.json

这有什么问题吗?

您需要使用 "extended json" in queries with mongoexport. So the way to specify "dates" is with $date instead. And the --query 只是 JSON 格式中的 "query string"。不是整个命令输入 shell:

mongoexport --db ium --collection events \
  --query '{ 
    "created_at": { 
      "$gte": { "$date": "2016-03-01T00:00:00.001Z" },
      "$lte": { "$date": "2016-03-29T23:59:59.000Z" }
    },
    "name": "UPDATE_SUCCESS"
  }' \
  --out guile1_test.json

还要注意 $lte 参数中更正的日期字符串,当然还有 "quoting" 在 JSON 参数和 [=15] 正文周围使用 '' =] 围绕内部表达式和值。 重要 这些类型的引号是不同的,"shell arguments" 应该将它们的 "outer" 引号设为 '',否则 "shell" 尝试评估包含的表达式。

另一个可行的解决方案是使用 new Date() 构造函数,如 MongoDB manual 中所述。这将导致更小的查询主体足迹,如下所示:

    mongoexport --db ium --collection events \
  --query '{ 
    "created_at": { 
      "$gte": new Date("2016-03-01T00:00:00.001Z"),
      "$lte": new Date("2016-03-29T23:59:59.000Z")
    },
    "name": "UPDATE_SUCCESS"
  }' \
  --out guile1_test.json

这种方法对我来说开箱即用,而所有其他替代方法都失败了。有一篇相关文章描述了这种方法 here

实现它的最佳方法如下。因为 new Date 和 IOSDate 对于这个命令来说是无效的。

For remote host

mongoexport --host {{host}} --username {{username}} --password {{passord}} --authenticationDatabase admin --db {{Database}} --collection {{collection Name}} --query '{ "date" : { "$gt" : {"$date":"2019-10-31T00:00:00.000Z"}  } }'  --type json --out {{path of directory where you would want to export file.}}

For local host

 mongoexport  --db {{Database}} --collection {{collection Name}} --query '{ "date" : { "$gt" : {"$date":"2019-10-31T00:00:00.000Z"}  } }'  --type json --out {{path of directory where you would want to export file.}}