Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.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
Javascript Mongo DB在插入时对对象重新排序_Javascript_Node.js_Mongodb_Express - Fatal编程技术网

Javascript Mongo DB在插入时对对象重新排序

Javascript Mongo DB在插入时对对象重新排序,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,在我的节点js应用程序中,我使用Mongo DB,在数据库中插入内容时出现问题。当我向重新排序的集合对象添加新记录时。有人知道为什么会这样吗?我是这样做的 collection.insert(object, {safe:true}, function(err, result) { if (err) { res.send({'error':'An error has occurred'}); } else { // Error } });

在我的节点js应用程序中,我使用Mongo DB,在数据库中插入内容时出现问题。当我向重新排序的集合对象添加新记录时。有人知道为什么会这样吗?我是这样做的

collection.insert(object, {safe:true}, function(err, result) {
    if (err) {
        res.send({'error':'An error has occurred'});
    } else {
        // Error
    }
});

实际上,对集合的任何操作都会改变对象的顺序,有人知道为什么会发生这种情况吗?

MongoDB文档具有用于更新的填充空间。如果对文档进行一些小的更改,如添加/更新一个小字段,则更新文档的大小很有可能会增加,但仍然适合分配的空间,因为它可以使用该填充。如果更新的文档不适合该空间,Mongo会将其移动到磁盘上的新位置。因此,您的文档在开始时可能会移动很多,直到Mongo了解到通常需要多少填充来防止此类移动。您还可以设置更高的填充,以避免文档首先被移动

在这两种情况下,您都不能真正依靠插入顺序来获得已排序的文档列表。如果你想要保证订单,你需要排序。在您的情况下,您可以按
\u id
排序,因为它是一个单调递增的计数器,包含日期和时间详细信息:

// in the order of insertion unless you got `_id` value externally
// (in your code, not auto assigned by Mongo) and doc with such ID
// was inserted much later.
// Sharding might also introduce tiny ordering mismatches
db.collection.find().sort( { '_id': 1 } );

// most recently inserted items first
db.collection.find().sort( { '_id': -1 } );
如果您使用capped collection,插入的顺序将始终保留,即Mongo将永远不会移动文档。在这种情况下,您可以使用自然顺序排序:

db.collection.find().sort( { $natural: 1 } )
这相当于按
\u id
排序,如上所示


不要对无上限集合(常规集合)使用自然顺序排序,因为它在出现更新时不可靠。

为什么重要?对象是无序的。对。如果您希望文档按特定顺序返回,则必须在查询时对其进行排序。@tymeJV当我让它们显示菜单项时,我需要对哪些菜单项进行排序,例如,现在我有了“索引、歌曲、图片”,如果我将新对象添加到集合中,我希望该对象最后显示,但我得到了这个示例“索引、混音、图片、歌曲”@JohnnyHK怎么做?你有什么参考资料吗?@Markuzzhultz——Mongo有一个
$sort
功能--