出于性能原因,您应该在 Mongo 而不是 Python 中进行选择和排序。我不知道您是想要元组中的整个子文档还是只想要年龄,但这是您的操作方法。
样本数据:
> db.tuple.find({},{_id:0})
{ "classes" : 3, "people" : [ { "name" : "John", "age" : 20, "city" : "London" }, { "name" : "Alice", "age" : 56, "city" : "Dublin" } ] }
{ "classes" : 3, "people" : [ { "name" : "John", "age" : 50, "city" : "London" }, { "name" : "Alice", "age" : 56, "city" : "Dublin" } ] }
{ "classes" : 3, "people" : [ { "name" : "John", "age" : 10, "city" : "London" }, { "name" : "Alice", "age" : 56, "city" : "Dublin" } ] }
{ "classes" : 0, "people" : [ { "name" : "John", "age" : 10, "city" : "London" }, { "name" : "Alice", "age" : 56, "city" : "Dublin" } ] }
{ "people" : [ { "name" : "John", "age" : 15, "city" : "London" }, { "name" : "Alice", "age" : 56, "city" : "Dublin" } ] }
仅返回按年龄排序的第一个数组文档,类别 > 0:
> db.tuple.find({classes:{$gt:0}}, {_id:0,"people":1,"people":{$slice:1}}).sort({"people.age":1})
{ "classes" : 3, "people" : [ { "name" : "John", "age" : 10, "city" : "London" } ] }
{ "classes" : 3, "people" : [ { "name" : "John", "age" : 20, "city" : "London" } ] }
{ "classes" : 3, "people" : [ { "name" : "John", "age" : 50, "city" : "London" } ] }
同样的事情只返回年龄:
> db.tuple.find({classes:{$gt:0}}, {_id:0,"people.age":1,"people":{$slice:1}}).sort({"people.age":1})
{ "people" : [ { "age" : 10 } ] }
{ "people" : [ { "age" : 20 } ] }
{ "people" : [ { "age" : 50 } ] }