Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Mongodb中对集合进行永久排序_Mongodb_Sorting - Fatal编程技术网

在Mongodb中对集合进行永久排序

在Mongodb中对集合进行永久排序,mongodb,sorting,Mongodb,Sorting,无论何时执行db.Collection.find().sort(),都只对输出进行排序,而不对集合本身进行排序 i、 如果我做db.collection.find(),那么我看到的是原始集合,而不是已排序的集合 除了对输出进行排序外,还有什么方法可以对集合本身进行排序 将排序结果导出到整个新集合中也可以 如果我对_id字段进行了编号(如_id:1、_id\u 2、_id:3等等)我也看不出有任何理由这样做(对要排序的字段进行索引将帮助您快速进行排序),以下是解决问题的方法: 您的测试集合是这样的

无论何时执行db.Collection.find().sort(),都只对输出进行排序,而不对集合本身进行排序

i、 如果我做db.collection.find(),那么我看到的是原始集合,而不是已排序的集合

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

将排序结果导出到整个新集合中也可以


如果我对_id字段进行了编号(如_id:1、_id\u 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);
})
与此完全相同(我认为这可能会执行得更快,但我没有进行任何测试):

为了完整地回答这个问题,我也明白这是一种过分的做法,你可以用


仅强调一下:有了这些,您可以解决更大的问题:将以前集合的某些修改/子集保存到另一个集合中。

而且我看不出有任何理由这样做(在要排序的字段上建立索引将帮助您快速进行排序),以下是您的问题的解决方案:

您的测试集合是这样的

{ "_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);
})
与此完全相同(我认为这可能会执行得更快,但我没有进行任何测试):

为了完整地回答这个问题,我也明白这是一种过分的做法,你可以用


仅强调一下:通过这些,您可以解决更大的问题:将以前集合的某些修改/子集保存到另一个集合中。

集合中的文档存储在其中,文档移动(当文档增长超过分配的当前记录空间)和删除会对其产生影响(可用空间可重新用于插入/移动的文档)。目前(在MongoDB 2.4中),除了使用a之外,没有控制磁盘上文档顺序的选项,a是一个固定大小的集合,用于维护插入顺序,但受a限制

索引是按照预期的排序顺序高效返回文档的适当方式。有关更多信息,请参阅MongoDB手册中的


一个相关功能是,它将文档存储在磁盘上以匹配索引顺序。这不是MongoDB的当前功能,尽管它已被请求(请参阅)。

集合中的文档存储在受文档移动(当文档增长超过分配的当前记录空间)和删除影响的文档中(可用空间可重新用于插入/移动的文档)。目前(在MongoDB 2.4中),除了使用a之外,没有控制磁盘上文档顺序的选项,a是一个固定大小的集合,用于维护插入顺序,但受a限制

索引是按照预期的排序顺序高效返回文档的适当方式。有关更多信息,请参阅MongoDB手册中的


一个相关功能是,它将文档存储在磁盘上以匹配索引顺序。这不是MongoDB的当前功能,尽管它已被请求(请参阅).

您可以使用orderby对您的收藏进行排序有什么特殊原因吗?存储的文档没有固有的“顺序”。如果您想经常对特定字段进行排序,请为其创建一个索引。@rubyist这与执行排序()相同。他问的是,是否有一种方法可以对存储在集合中的订单文档进行永久排序,但事实并非如此。@TomSwifty实际上我是mongodb的新手,我只是想知道我是否可以这样做,没有什么特别的原因。另外,你能再解释一下indexin吗?简短地说,索引将进行查询和排序速度要快几个数量级(只要构造正确),您可以使用orderby对集合进行排序有什么特殊的原因吗?存储的文档没有固有的“顺序”。如果您想经常对特定字段进行排序,请为其创建索引。@rubyist这与执行排序()相同。他问的是,是否有一种方法可以对存储在集合中的订单文档进行永久排序,但事实并非如此。@TomSwifty实际上我是mongodb的新手,我只是想知道我是否可以这样做,没有什么特别的原因。另外,你能再解释一下indexin吗?简短地说,索引将进行查询和排序的速度要快几个数量级(只要您正确构造它们),插入顺序仅保证为,因此此建议不会像您建议的那样维护真正的已排序集合。正常集合中的文档存储在受文档移动影响的集合中(当文档增长超过分配的记录空间时)和删除(可用空间可用于插入/移动的文档)。索引是按预期的排序顺序返回文档的适当方式。@Stennie感谢您告诉我移动可能出现的问题。但我没有告诉您这将创建一个集合,该集合将在以后一直进行排序。我只是告诉您,在操作完成后,集合将被排序。如果您愿意的话如果在集合中执行更新或新插入,则不会保留顺序。我还强调指出,唯一的方法是使用排序进行查找。插入顺序仅保证用于,因此此建议不会按照您的建议维护真正的排序集合。正常集合中的文档存储在受文档移动影响的集合中(当文档增长超过分配的记录空间时)和删除(可用空间可用于插入/移动的文档)。索引是适当的