Mam kilka dokumentów MongoDB i wszystkie mają pola datownika z datą zapisanego jako „1404008160”. Chcę posortować wszystkie dokumenty w tej kolekcji według kolejności opisów. Robię to przez:rodzaj MongoDB dokumenty według znacznika czasu (w kolejności malejąco)
sort = [('timestamp', DESCENDING)]
collection.find(limit=10).sort(sort)
Jednak nie otrzymuję wyników posortowanych według znacznika czasowego w porządku malejącym. Myślę, że to dlatego, że znacznik czasu jest traktowany jako pole int. Czy jest to obejście bez zmiany typu danych pola znacznika czasu. Mam już wiele danych w tej kolekcji, więc nie chcę przechodzić przez kłopotów z importem/eksportem, itp.
Również - Chcę zachować ładunek do sortowania do mongodb zamiast robić to programowo w pythonie .
Żeby było jasne: Znacznik czasu nie wskazuje, kiedy dokument został utworzony i jest on przechowywany jako ciąg znaków (na przykład „1404217646”).
Z góry dziękuję.
Zakładam zaimportowaniu stałe, które w przeciwnym razie byłyby reprezentowane jako 'pymongo.DESCENDING'. Ale tak naprawdę to jest tylko stała dla "-1", aby ułatwić czytanie. Jako "int" nie powinno mieć znaczenia, ponieważ wartości powinny zamawiać w ten sposób. Być może są to faktycznie łańcuchy? Czy te cytaty "" "pojawiają się, gdy patrzysz na dane w powłoce? –
tak - cytuje zrobić pojawia się - tak timestamp jest przechowywany jako ciąg .. i szukam obejście bez zmiany typu danych tej dziedzinie we wszystkich istniejących docs – jisu
Tam naprawdę nie jest to obejście. Nawet jako ciągi powinny to być poprawnie posortowane, ponieważ wartości są leksykalne. O ile oczywiście niektóre z nich są liczbami, a niektóre są ciągami, co spowoduje problem. Jeśli szukasz sposobu na MongoDB do "rzucania" wartościami, to tak się nie stanie, poza hackery string, ale to nie byłoby wydajne. Naprawdę musisz zmienić typ. Najlepszą formą jest data BSON, która po prostu wewnętrznie przechowuje wartość znacznika czasu, ale automatycznie będzie rzutować jako daty w twoim programie. –