Ошибка слишком большого количества опций при создании журнала изменений

Пытаясь использовать mongoexport для экспорта 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 ответ

Решение

Итак, наконец, вот как это должно быть сделано... или как я это сделал. Это довольно быстро, пробовал на 30000 записей занимает максимум 2 секунды. Все, что происходит, это то, что я сохраняю результаты в новой коллекции, используя mongo с параметром --eval

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"

а затем экспортируйте его как.csv, используя mongoexport

../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()'
Другие вопросы по тегам