我正在使用MongoDB和Python。我使用以下命令插入我的文档:
name
(age
和db.test.find().sort("Age", 1)
是我的代码中的变量)
我使用以下命令从最年长到最年轻的排序:
db.test.save()
我知道我只是在代码中发出一个find命令。有没有一种聪明的方法可以使用$push
方法对文档进行排序并使用已排序的文档覆盖原始文档?
我研究了许多有些解决这个问题的问题,例如: How to store sorted array back to MongoDB?
但是为了在update_one
内执行$sort
命令并使用In [7]: df["a"].str.split().str.len().sum()
Out[7]: 6
功能,我必须重新处理我的整个代码。我有什么选择?我是否需要重新编写代码,还是有其他方法?
答案 0 :(得分:2)
您正在混合mongo中的两个概念:对文档中嵌入的数组进行排序,并通过某些属性对集合中的文档进行排序。
您链接的帖子指的是前者。您似乎试图永久地对集合中的文档进行排序。
Mongo按照大致写入的顺序存储文档。与大多数数据库一样,它使用索引来提高检索数据的效率。
在您描述的实例中,您将在文档的age属性上创建索引。
使用ensure_index或create_index函数:
db.test.ensure_index("Age", pymongo.DESCENDING)
从此以后,每个查询都像
db.test.find().sort("Age", -1)
使用索引并且速度非常快。
我想您可以尝试将文档重写为已排序的偏好中的另一个集合,然后查看简单的提取是否总是按年龄顺序返回。但这并不是考虑mongo的正确方法。