我有一个名为"date"的字段的集合(也是索引的).它保存值yyyymmdd(例如:20140731,20140730,20140729 ......)
文档根据日期以降序存储.所以该系列有20140731作为第一个文件.
当我使用带有过滤器{$ gte:20140720,$ lte:20140731}的find命令时,mongodb以"date"字段的升序返回查询.
我知道我可以使用sort,但是如何让mongodb根据它的创建顺序返回结果?
谢谢!
文档根据日期以降序存储.所以该系列有20140731作为第一个文件.
除非您使用上限集合,否则无法保证磁盘上的文档排序(也称为自然顺序).
文档删除和移动(当文档超出其分配的记录空间时)在空闲列表上创建将被重用的空间.
这是一个快速示例,应该在mongoshell中演示:
// 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()
Run Code Online (Sandbox Code Playgroud)
当我使用带有过滤器{$ gte:20140720,$ lte:20140731}的find命令时,mongodb以"date"字段的升序返回查询.
如果索引用于查询,则按索引中找到的顺序返回文档.在为常见查询构建索引时应该利用这一点(请参阅:使用索引对查询结果进行排序).
仅供参考,简单索引(例如,开启{date:1})可用于返回按升序或降序排序的结果.
如果您正在使用MongoDB的默认的ObjectID的_id,你可以按{ _id: 1 }到近似的插入顺序,因为前4个字节的对象ID的结合时间戳.如果您想使用它来根据date和近似的插入顺序对查询进行排序,那么您将确保索引{date:1, _id:1}.
请注意,ObjectID通常由客户端驱动程序生成,因此如果您的应用程序服务器上有时钟漂移(或者在_id插入文档之前的某个时间创建),则ObjectID可能不会严格反映服务器看到的"插入顺序".如果插入顺序的准确性非常重要,通常可以_id在服务器端生成(方法因驱动程序而异).
| 归档时间: |
|
| 查看次数: |
4101 次 |
| 最近记录: |