0

I have the following code:

myd = mergedCollection.find(myquery).sort("Price")
print("MY D: "+str(myd))
shoes = myd[0]["theAssociatedShoes"]
print("Shoes: "+ str(shoes))

With the output:

MY D: <pymongo.cursor.Cursor object at 0x05859538>
Shoes: [{'Title': 'Nike Cosmic Unity "Amalgam"', 'Price': 160, 'Currency': 'USD', 'Picture': 'https://static.nike.com/a/images/t_default/3bca4f51-f2e4-4948-a665-27e03eea4ddd/cosmic-unity-amalgam-basketball-shoe-nDHKr4.png', 'Link': 'nike.com/t/cosmic-unity-amalgam-basketball-shoe-nDHKr4/DA6725-500', 'Brand': 'nike'}, {'Title': 'Ultraboost 21 Shoes', 'Price': 180, 'Currency': ' USD', 'Picture': 'https://assets.adidas.com/images/w_280,h_280,f_auto,q_auto:sensitive/3728ddf5b7dc4a2ca3e3ac7d0106c5a1_9366/ultraboost-21-shoes.jpg', 'Link': 'adidas.com/us/ultraboost-21-shoes/FY0350.html', 'Brand': 'adidas'}, {'Title': 'Fresh', 'Price': 129, 'Currency': ' USD', 'Picture': 'https://nb.scene7.com/is/image/NB/m880f11_nb_02_i?$pdpflexf2$&wid=440&hei=440', 'Link': 'newbalance.com/pd/fresh-foam-880v11/M880V11-33418.html', 'Brand': 'newbalance'}, {'Title': 'Jordan Delta Breathe', 'Price': 130, 'Currency': 'USD', 'Picture': 'https://static.nike.com/a/images/t_default/b54eef6b-6dd5-4c07-9b09-901ab9d7b01a/jordan-delta-breathe-mens-shoe-2ggX3h.png', 'Link': 'nike.com/t/jordan-delta-breathe-mens-shoe-2ggX3h/CW0783-901', 'Brand': 'jordan'},...]
     ...

How come the Shoes are not sorted by price here? I have also tried using this code:

myd = mergedCollection.find(myquery)[0]["theAssociatedShoes"].sort("Price")

But that throws a syntax error. I've also tried this solution to no avail.

myd = mergedCollection.find(myquery).sort("theAssociatedShoes.Price", -1)
sytactive
  • 13
  • 3
  • Maybe I'm reading something wrong, 100, 180, 184, 185 looks sorted? – Joe May 01 '21 at 03:50
  • Nice catch @Joe, it just so happened the current query I used first four were in order. I updated – sytactive May 01 '21 at 04:29
  • find() can not sort embedded documents, you have to use aggregation method. see similar question [How to sort array inside collection record in MongoDB?](https://stackoverflow.com/questions/13449874/how-to-sort-array-inside-collection-record-in-mongodb) – turivishal May 01 '21 at 06:21
  • Does this answer your question? [How to sort array inside collection record in MongoDB?](https://stackoverflow.com/questions/13449874/how-to-sort-array-inside-collection-record-in-mongodb) – bad_coder May 02 '21 at 09:37

1 Answers1

0

Looking at your code, the data you are interested in is all in one record. MongoDB's sort only works across multiple records. To get the results in price order, use python's sorted built-in function and a lambda expression.

myd = collection.find()
for record in sorted(myd[0]["theAssociatedShoes"], key=lambda price: price['Price']):
    print(record)
Belly Buster
  • 8,224
  • 2
  • 7
  • 20