MongoDB - коллекции монгодумп с лимитом - PullRequest
0 голосов
/ 19 октября 2019

Есть ли способ монгодумпировать базу данных с более чем 10 коллекциями и получить последние 100 объектов в каждой коллекции?

Вот то, что я тренировал, но это не работает:

mongodump --gzip --uri="mongodb://$IP:$PORT/$DB" \
    --collection=$COLLECTION  \
    --archive=$COLLECTION.gz \
    --query="{ \"\$limit\": 100 }"

Вот вывод:

Failed: (command failure) Can't canonicalize query: BadValue unknown top level operator: $limit

Мне действительно нужен лимит запросов для работы, потому что некоторые коллекции имеют 5 ГБ данных , и я просто запускаю этодля локальных целей разработки, поэтому мне нужен только небольшой набор образцов того, что на самом деле находится в базе данных / коллекциях

Любая помощь с этим будет оценена!

Обновление:

У моих объектов есть поле unix timestamp, и я переключил запрос на это, но все еще безуспешно:

// Attempt #2
-q='{"timestamp": { "$gt": "1569888896" }}'

// Attempt #3
-q='{"timestamp":{"$gte": [{ "$toDate": "$timestamp"}, "ISODate(2016-01-01T00:00:00.000Z)"]}}'

В этих случаях нет ошибок, но он продолжает передаваться обратно0 объектов!

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

Вместо этого вы можете попробовать mongoexport и mongoimport, которые имеют параметры сортировки и ограничения, сравнительно медленнее, чем mongodump, поскольку вам нужно только 100 объектов, которые подойдут для вашего случая.

mongoexport -h $HOST 
  -u $USERNAME 
  -p $PASSWORD 
  -d $DATABASE 
  -c $COLLECTION 
  -q '{}' 
  --sort '{_id: -1}' 
  --limit 100 
  -o $COLLECTION.csv
0 голосов
/ 19 октября 2019

Мне удалось получить что-то работающее, хотя и не идеально.

Если я жестко закодировал в метку времени Unix без кавычек , это работает, и сам запрос должен бытьв одинарных кавычках.

--query '{ "timestamp" : { "$gt" : 1569890129 } }'

Источник: https://docs.mongodb.com/manual/reference/program/mongodump/#cmdoption-mongodump-query

Документ запроса необходимо заключить в одинарные кавычки ('{...}'), чтобы обеспечить егоне взаимодействует с вашей оболочкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...