gpt4 book ai didi

Mongodb find的返回文档顺序

转载 作者:行者123 更新时间:2023-12-02 13:07:10 25 4
gpt4 key购买 nike

我有一个集合,其中包含一个名为date(也已索引)的字段。它保存值yyyymmdd(例如:201407312014073020140729...)

文档根据日期按降序存储。因此该集合将 20140731 作为第一个文档。

当我使用带有过滤器的 find 命令 {$gte : 20140720, $lte : 20140731} 时,mongodb 按 date 字段的升序返回查询。

我知道我可以使用排序,但是如何让 mongodb 根据创建的顺序返回结果?

谢谢!

最佳答案

文档按自然顺序存储

The documents are stored in descending order based on date. So the collection has 20140731 as the first document.

除非您使用 capped collection ,不保证磁盘上文档的顺序(也称为 natural order )。

文档删除和移动(当文档超出其分配的记录空间时)会在空闲列表上创建将被重用的空间。

这是一个在 mongo shell 中演示这一点的简单示例:

// Start with an empty database & collection
use demodb; db.dropDatabase(); db.order.drop()

// Add some test data
for (i=0; i<1000; i++) {
db.order.insert({'i': i})
}

// Looks like insertion order! (0..9)
db.order.find({}).limit(10);

// Pause 5s for effect :)
sleep(5000);

// Remove half the entries
db.order.remove({ i: { $lt: 500 }})

// Re-add the missing entries
for (i=0; i<500; i++) {
db.order.insert({'i': i})
}

// Not the entries you expected .. space from deleted records was reused
db.order.find({}).limit(10)

// Clean up demodb
db.dropDatabase()

结果顺序

When I use the find command with filters {$gte : 20140720, $lte : 20140731}, mongodb returns back the query in ascending order of "date" field.

如果查询使用索引,则文档按照在索引中找到的顺序返回。在为常见查询构建索引时,您应该利用这一点(请参阅:Use Indexes to Sort Query Results)。

仅供引用,一个简单的索引(例如,{date:1})可用于返回按升序或降序排序的结果。

按对象 ID 排序

如果您使用的是 MongoDB 的 default ObjectIDs对于 _id,您可以按 { _id: 1 } 排序以近似插入顺序,因为 ObjectID 的前 4 个字节包含时间戳。如果您想使用它来根据日期和大致插入顺序对查询进行排序,您需要确保在{date:1, _id:1}上建立索引。

请注意,ObjectID 通常由客户端驱动程序生成,因此,如果您的应用服务器上存在时钟漂移(或者 _id 在文档创建之前的某个时间被插入)ObjectID 可能不严格反射(reflect)服务器所看到的“插入顺序”。如果插入顺序的准确性非常重要,通常可以在服务器端生成_id(方法因驱动程序而异)。

关于Mongodb find的返回文档顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25091017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com