2017-08-30 4 views
0

Je n'arrive pas à trier les données par prix. Je veux montrer le prix basé sur la valeur du prix J'ai essayé, mais les résultats ne sont pas comme je m'y attendais.Prix de tri en mongodb

test de code:

from pymongo import MongoClient 
client = MongoClient().ecome 
col = client['post_product'] 

data = [] 
GetData = col.find({'Category':'Handphone'}).sort([('Price', pymongo.ASCENDING)]).limit(10) 
for x in GetData: 
    listed = dict(
     title=x['Title'], 
     price=x['Price'] 
    ) 
    data.append(listed) 

print data 

et le résultat:

[{ 
    'price': '10', 
    'title': 'tresemse' 
}, { 
    'price': '200', 
    'title': 'muaral winner' 
}, { 
    'price': '30', 
    'title': 'troboca' 
}, { 
    'price': '400', 
    'title': 'brek yule' 
}, { 
    'price': '50', 
    'title': 'moun yus' 
}] 

les résultats que j'attends sont:

[{ 
    'price': '10', 
    'title': 'tresemse' 
}, { 
    'price': '30', 
    'title': 'troboca' 
}, { 
    'price': '50', 
    'title': 'moun yus' 
}, { 
    'price': '200', 
    'title': 'muaral winner' 
}, { 
    'price': '400', 
    'title': 'brek yule' 
}] 

s'il vous plaît aider!

+1

double possible de [tri mongodb dans la requête?] (Https://stackoverflow.com/questions/45953079/mongodb-sort-within-the-query) – felix

+0

@felix, apparemment pas, ce cas est trier les données en fonction de la valeur du prix –

+0

c'est le même problème, votre champ 'price' est une chaîne, d'où il est trié comme une chaîne, c'est-à-dire par ordre alphabétique – felix

Répondre

1

Voici comment les chaînes sont triées. Vous devez modifier le champ Prix en nombre si vous souhaitez qu'il soit trié en tant que nombre et non en tant que chaîne. Mongo ne peut pas supposer que c'est un chiffre quand ce n'est pas le cas.

+0

bien, merci beaucoup votre réponse. Je vais essayer de le convertir en nombre entier. –

0

mettez simplement ce qui suit à la fin de votre code;

data.sort(key = lambda item: float(item["price"]))