创建更改日志时mongoexport有太多选项错误

时间:2013-01-24 07:34:12

标签: mongodb changelog mongoimport mongoexport

尝试使用mongoexport导出oplog的csv ...尝试了到目前为止我读过的所有引用组合......

../mongodb/bin/mongoexport --csv -d local -c oplog.rs -o export.csv -f {op,ns,o._id} -q "{ts: { \"$gte\": Timestamp(1355100998000,1)} , op :{ \"$nin\" : [\"c\",\"n\"]}"

但我一直在

ERROR: too many positional options
.....

可能出错?

经过大量的拧紧后我尝试了这个

q="{op: { \$nin: [\"c\",\"n\"]}}"
mongoexport --csv -d local -c oplog.rs -o export.csv -f {op,ns,o._id} -q "$q"

这就像一个魅力。 但仍然是这个

q="{ts: { \$gte: Timestamp(1355100998000,1)}, op: { \$nin: [\"c\",\"n\"]}}"
../mongodb/bin/mongoexport --csv --db local --collection oplog.rs -o changelog.csv --fields op,ns -q "$q"

不起作用。输出

 Assertion: 10340:Failure parsing JSON string near: ts: { $gte

感觉Timestamp()出了什么问题?

1 个答案:

答案 0 :(得分:1)

所以最后这应该是怎么做的......或者我是怎么做到的。在30000条记录上花费最多2秒就可以快速尝试它。 所有发生的事情是我通过使用带有--eval选项的mongo将结果存储到一个新集合中

q="db.oplog.rs.find({ ts : { \$gte : Timestamp( $timestamp, 1)}, op : { \$nin : [\"c\",\"n\"] } }, { op : 1 , ns : 1 , \"o._id\" : 1 , h : 1 } ).forEach(function(x){db.changelog.save(x);})"

../mongodb/bin/mongo localhost:27017/local --eval "$q"

然后使用mongoexport

将其导出为.csv
../mongodb/bin/mongoexport --csv --db local --collection changelog -o changelog.csv --fields "o._id","op","ns","h"

并删除临时数据库以支持将来的更改日志

../mongodb/bin/mongo localhost:27017/local --eval 'db.changelog.remove()'