2

试图使用 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() 有问题?

4

1 回答 1

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()'
于 2013-01-28T08:22:11.060 回答