简体   繁体   English

如何查询和排序python中嵌套的mongodb信息?

[英]How to query and sort nested mongodb information in python?

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:使用 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)

Looking at your code, the data you are interested in is all in one record.查看您的代码,您感兴趣的数据都在一条记录中。 MongoDB's sort only works across multiple records. MongoDB 的排序仅适用于多条记录。 To get the results in price order, use python's sorted built-in function and a lambda expression.要按价格顺序获取结果,请使用 python 的sorted内置 function 和lambda表达式。

myd = collection.find()
for record in sorted(myd[0]["theAssociatedShoes"], key=lambda price: price['Price']):
    print(record)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM