每当我们执行 db.Collection.find().sort() 时,只有我们的输出被排序,而不是集合本身,
即如果我执行 db.collection.find() 那么我会看到原始集合,而不是排序后的集合。
有什么方法可以对集合本身进行排序,而不仅仅是对输出进行排序?
将排序后的结果导出到整个新集合中也可以。
如果我有编号的 _id 字段。(如 _id:1 、 _id_2 、 _id:3 等等)
最佳答案
此外,我看不出有任何理由这样做(您要排序的字段上的索引将帮助您快速进行排序),这是您问题的解决方案:
这样你就有了你的测试集
{ "_id" : ObjectId("5273f6987c6c502364ddfe94"), "n" : 5 }
{ "_id" : ObjectId("5273f6e57c6c502364ddfe95"), "n" : 14}
{ "_id" : ObjectId("5273f6ee7c6c502364ddfe96"), "n" : -5}
然后下面的命令将为你创建一个排序的集合
db.test.find().sort({n : 1}).forEach(function(e){
db.testSorted.insert(e);
})
完全相同的方式你可以用这个实现(我认为可能会执行得更快,但我没有做过任何测试):
db.testSorted.insert(db.test.find().sort({n : 1}).toArray());
为了使这个答案完整,我也明白这是一个矫枉过正,你可以用 aggregation framework option $out 来做到这一点.
只是强调一下:通过所有这些您可以解决更大的问题:将先前集合的某种修改/子集保存到另一个集合中。
关于mongodb - 在 Mongodb 中永久排序集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19730721/