在Mongodb中永久排序收藏

问题描述 投票:1回答:2

每当我们做db.Collection.find().sort()时,只有我们的输出是排序的,而不是集合本身。

即:如果我做db.collection.find(),那么我看到的是原始的集合,而不是排序后的集合。

除了对输出进行排序外,还有什么方法可以对集合本身进行排序吗?

将排序后的结果输出到整个新的集合中也可以。

如果我有编号的_id字段(比如_id:1 , _id_2 , _id:3等等)

mongodb sorting
2个回答
4
投票

我也看不出有什么理由这样做(在你要排序的字段上设置索引会帮助你快速得到这个排序),这里有一个解决你问题的方法。

你的测试集合是这样的

{ "_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());

为了让这个答案更完整,我也明白这是个过度的方法,你可以这样做 聚合框架选项$out.

只是为了强调有了这些,你就可以解决更大的问题:把前一个集合的某种修改子集保存到另一个集合中。


0
投票

一个集合中的文件存储在 自然规律 受文档移动(当文档大于当前分配的记录空间时)和删除(插入移动的文档可以重新使用空闲空间)的影响。 目前(在MongoDB 2.4时)没有任何选项可以控制文档在磁盘上的顺序,除了使用 封藏,这是一个固定大小的集合,保持插入顺序,但受制于 限制数.

索引是按照预期的排序顺序高效返回文档的合适方式。 有关更多信息,请参见:使用索引对查询结果进行排序。使用索引对查询结果进行排序 在MongoDB手册中。

一个相关的功能是一个 聚类指数,它将在磁盘上存储文档以匹配索引排序。 这不是MongoDB当前的一个功能,尽管它已经被请求了(见 SERVER-3294).

© www.soinside.com 2019 - 2024. All rights reserved.