Ошибка слишком большого количества опций при создании журнала изменений
Пытаясь использовать 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()'