如何使用 MongoEngine Python 根据文档中字典内的键对 MongoDB 中的文档进行排序?

问题描述

所以我的 MongoDB 集合中有这种类型的文档:

{
    "_id" : ObjectId("606c66c875a2fe6153bfc71f"),"t_id" : "12345678a","r_id" : "r12345678a","t_e_stats" : {
        "acc" : "70"
    },"register_time" : ISODate("2021-04-06T19:18:56.890Z")
}

这些文档中有多个具有相同的 't_id' 和不同的 't_e_stats' 字典。但是所有 't_e_stats' 字典中都有 'acc' 键。现在我想在 't_e_stats' 字典中查询具有最大值 'acc' 的特定 't_id' 的条目。我如何在 MongoEngine 中做到这一点?或者我发现也有一些方法可以在 MongoEngine 中运行 PyMongo 查询,如果可能的话,如何使用它?

解决方法

正如 OP 所评论

Model.objects(t_id="12345678a").order_by("-t_e_stats.acc").first()

如果有人不仅对对象而且对 JSON 文档感兴趣,那么您可以这样做:

[data_entry._data for data_entry in Model.objects(t_id="12345678a").order_by("-t_e_stats.acc")][0]

使用.sort

https://pymongo.readthedocs.io/en/stable/api/pymongo/collection.html?highlight=find%20one#pymongo.collection.Collection.find_one

mycol.find_one({ "t_id" : "12345678a" }).sort("t_e_stats.acc",pymongo.DESCENDING)

这将返回第一个记录,其中 t_e_stats.acc 为最大值。


mongo shell

db.collection.find({ "t_id" : "12345678a" }).sort("t_e_stats.acc",-1).limit(1);

蒙戈引擎

Model.objects.get(t_id="12345678a").order_by("-t_e_stats.acc").first()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...