mongodb - 在 Mongodb 中永久排序集合

标签 mongodb sorting

每当我们执行 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/

相关文章:

java - BasicDBList 到 Collection MongoDB

php - MongoDB PHP 限制字段的返回值

list - 如何在vim中随机播放列表?

c - 按其中一个字符串值的字母顺序对结构数组进行排序的函数

r - 如何在 Shiny 的应用程序中对桑基图中的源和/或目标节点进行排序?

Python:包含元组的排序列表

.net - 使用随机比较委托(delegate)的 List.Sort 可以无限运行吗?

javascript - 如何从 Mongoose 中的父字段的子文档更改字段

c# - MongoDB 和 C# 数据源

mongodb - Mongodb有内存模式吗?