Ho un mucchio di documenti in mongodb e tutti hanno un campo data/ora con data/ora memorizzato come "1404008160". Voglio ordinare tutti i documenti in questa raccolta in ordine decrescente. Lo faccio da:ordina documenti mongodb per data e ora (in ordine discendente)
sort = [('timestamp', DESCENDING)]
collection.find(limit=10).sort(sort)
Tuttavia, non ottengo risultati ordinati per data e ora in ordine di discesa. Penso che sia perché il timestamp viene trattato come un campo int. C'è un lavoro attorno a questo senza cambiare il tipo di dati del campo data/ora. Ho già molti dati in questa collezione quindi non voglio passare attraverso il fastidio di import/export, ecc.
Inoltre, voglio mantenere il carico per l'ordinamento su mongodb piuttosto che farlo a livello di codice in python .
Per essere chiari: la data/ora non indica quando il documento è stato creato e viene memorizzato come stringa (ad esempio "1404217646").
Grazie in anticipo.
presumo aver importato le costanti che altrimenti sarebbero rappresentati come 'pymongo.DESCENDING'. Ma in realtà questa è solo una costante per '-1' per facilitare la lettura. Come un 'int' non dovrebbe avere importanza in quanto i valori dovrebbero essere ordinati in quel modo. Forse queste sono effettivamente stringhe? Significato, queste virgolette '" "' appaiono quando guardi i dati nella shell? –
sì - le virgolette appaiono - quindi il timestamp è memorizzato come stringa .. e sto cercando una soluzione alternativa senza modificare il tipo di dati di questo campo in tutti i documenti esistenti – jisu
Non c'è davvero una soluzione alternativa. Anche se le stringhe dovrebbero essere ordinate correttamente, i valori sono lessicali. A meno che alcuni siano numeri e alcuni siano stringhe, il che causerà un problema. Se stai cercando un modo per MongoDB di "castare" i valori, allora questo non accadrà, al di fuori degli hacker delle stringhe, ma ciò non sarebbe efficiente. Hai davvero bisogno di cambiare il tipo. La forma migliore è una data BSON, che memorizza solo internamente il valore del timestamp, ma verrà automaticamente trasmesso come date nel programma. –