2015-05-12 10 views
5

Jestem nowym początkującym mongodb. Chcę wyeksportować dane z ostatnich godzin z moich baz danych. Tak więc myślę, że muszę napisać komendę mongoexport i zawrzeć zakres dat w opcjach --query, aby to zrobić.mongoexport ostatnio godziny dane z mongodb

napisać plik bash, tak i spróbować go uruchomić:

#!/bin/bash 

mongoexport --host localhost:27017 --db copy --collection txt --csv --fields x1,x2,x3...,date --query '{ "date" : {$gt:new Date(new Date() - 1000*60*60*3)} }' --out home/data.csv 

Ale mam wyniki mówi:

connected to: localhost:27017 
assertion: 16619 code FailedToParse: FailedToParse: Expecting '}' or ',': offset:25 of:{ "date" : {$gt:new Date(new Date() - 1000*60*60*3)} } 

on widzi połączyć localhost ale nie może wyjście danych . Jeśli usunę opcję --query, może się to udać i uzyskać wszystkie dane, ale muszę potrzebować zapytania do podzbioru danych w ciągu ostatnich 3 godzin.

Wszelkie pomysły i pomoc będą wysoko cenione. Dziękuję i najlepsze.

+0

sprawdź to http://stackoverflow.com/questions/14758605/mongoexport-using-gt-and-lt-constraints-on-a-date-range –

Odpowiedz

1

z mongoexport musisz podać obiekt Date a timestamp.

wyjaśnieniu odpowiedzi tutaj: MongoDb timestamp

Co można napisać jako skrypt jest mniej więcej tak (jestem raczej rdzawy z bash, z pewnością można poprawić, aby zatrzymać się w jednej linii):

timestamp=$(date +%s) 
let total=$timestamp*1000-3600*1000*3 
mongoexport --host localhost:27017 --db copy --collection txt --csv --fields x1,x2,x3...,date --query '{ "date" : {$gt:new Date('$total')} }' --out home/data.csv 
+0

Cześć Luca, dziękuję za pomoc. Piszę skrypt bash tak jak mówisz i teraz nie ma błędu. Ale wciąż nie dostaję ostatnich 3 godzinnych danych. To tak: połączony z: localhost: 27017 wyeksportował 0 rekordów. Ale jestem pewien, że kopia bazy danych na komputerze lokalnym jest nowa, którą kopiowałem z serwera kilka minut temu, może zawierać ostatnio dane. Dlaczego wciąż otrzymuję 0 rekordów? – Sophia

+0

Drogi Sofii, aby sprawdzić, czy możesz połączyć się z kolekcją i uruchomić zapytanie: db.txt.find ({}, {_id: 0, ts: 1}). Sort ({ts: -1}) db.txt .find ({}, {_id: 0, ts: 1}). sort ({ts: 1}) i sprawdź daty, które wysyłasz. Alternatywnie, innym testem byłby eksport przy użyciu zapytania z nowej daty (0): 'mongoexport --host localhost: 27017 --db kopia - kolekcja txt --csv - pola x1, x2, x3 .. ., date --query "{" date ": {$ gt: new Date (0)}} '--out home/data.csv' ' Masz coś? –

+0

Cześć Luca, jeszcze raz dziękuję. Wchodzę w mongo, pokazuję dbs i pokazuję kolekcje w bazie danych kopii i używam kodu jak ty, ale pojawia się błąd. pokaż kolekcje img system.indexes txt > db.txt.find ({}, {_id: 0, ts: 1}). sort ({ts: -1}); error: { \t "$ err": "Błąd Runner: Przepełnienie rodzaj etap buforowane Wykorzystanie danych 33555446 bajtów przekracza wewnętrzny limit 33554432 bajtów", \t "code": 17144 – Sophia

Powiązane problemy