用于 mongodb ObjectId 创建时间

2024-02-21

The ObjectId用作 mongodb 文档中的默认键具有嵌入的时间戳(调用 objectid. Generation_time 返回一个日期时间对象)。那么是否可以使用这个生成时间而不是保留单独的创建时间戳?您如何能够使用此嵌入时间戳按创建时间排序或有效查询最后 N 个项目?


我想由于 MongoDB ObjectId 包含时间戳,如果您按 objectId 排序,则可以按“创建日期”排序:

items.find.sort( [['_id', -1]] ) // get all items desc by created date.

如果您想要最后 30 个创建的项目,您可以使用以下查询:

items.find.sort( [['_id', -1]] ).limit(30) // get last 30 createad items 

我实际上不确定,我只是认为按 _id 排序应该如上所述。稍后我将创建一些测试。

Update:

是的,确实如此。如果您按 _id 订购,您将自动按 _id 创建日期订购。 我在 C# 中做了一个小测试,mb 有人对此感兴趣:

  public class Item
  {
    [BsonId]
    public ObjectId Id { get; set; }

    public DateTime CreatedDate { get; set; }

    public int Index { get; set; }
  }



 [TestMethod]
 public void IdSortingTest()
 {
   var server = MongoServer.Create("mongodb://localhost:27020");
   var database = server.GetDatabase("tesdb");

   var collection = database.GetCollection("idSortTest");
   collection.RemoveAll();

   for (int i = 0; i <= 500; i++)
   {
     collection.Insert(new Item() { 
             Id = ObjectId.GenerateNewId(), 
             CreatedDate = DateTime.Now, 
             Index = i });
   }

   var cursor = collection.FindAllAs<Item>();
   cursor.SetSortOrder(SortBy.Descending("_id"));
   var itemsOrderedById = cursor.ToList();

   var cursor2 = collection.FindAllAs<Item>();
   cursor2.SetSortOrder(SortBy.Descending("CreatedDate"));
   var itemsOrderedCreatedDate = cursor.ToList();

   for (int i = 0; i <= 500; i++)
   {
     Assert.AreEqual(itemsOrderedById[i].Index, itemsOrderedCreatedDate[i].Index);
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于 mongodb ObjectId 创建时间 的相关文章

随机推荐

  • __iter__ 是如何工作的?

    尽管阅读了它 但我仍然不太明白如何 iter 作品 一个简单的解释是什么 我见过def iter self return self 我不知道这是如何工作的 也不知道这是如何工作的步骤 我可以简单地说 iter 在类上定义一个方法 该方法将返
  • JXTable 列排序在 1.0 和 1.6 之间发生变化

    自从我们更新到 JDK1 6 以来 我最近将应用程序中的 SwingX 库从版本 1 0 更新到了 1 6 2 我知道排序已更改为重新使用 JDK 1 6 中引入的一些核心 JDK 组件 但是 在版本 1 0 中 可以通过单击标题对列进行排
  • 为什么相同时间的 Unix 时间戳在不同时区不同

    Why 7 18 2013 11 33GMT 时区和我当地的时区 亚洲 加尔各答 是否不同 由于 Unix 时间戳是自纪元时间以来计算的刻度1 1 1970 00 00 00 GMT所以我知道纪元时间在不同时区的不同间隔发生 但仍然如此 经
  • 在 C++ 11 中创建动态二维矩阵的好方法

    我已经知道如何使用创建动态二维矩阵new并使用释放它delete 由于 C 11 具有许多新的内存功能 例如unique ptr array容器等 创建 2D 矩阵的一种好方法是什么 这样就不需要显式地使用释放矩阵delete操作员 最简单
  • Laravel 5 不从点 ENV 文件读取值

    我不知道这个问题是否相关 LARAVEL 5 仍处于开发阶段 在观看了有关 LARAVEL 5 新功能的 Laracast 视频之一后 我已经拉取了 LARAVEL 5 我迫不及待地等待它的正式发布 我命名了本地环境dot文件为 env l
  • 如果我在一个类中有多个测试并且前面的测试失败,我如何让它跳过或退出该类而不是测试其余的测试?

    我将 Python 与 Selenium 和 unittest 结合使用 我在一堂课中有四个测试 因为它们都是相关的单元测试 如果前面的测试失败 如何让它跳过下一个测试 我已经阅读了unittest的skip方法的所有文档 但没有一个正是我
  • 显示事件的典型 uml 图

    我有几个模块 他们通过事件相互交流 通常使用什么 UML 图来显示这一点 人们使用非 uml 图吗 有什么例子吗 我想你肯定想要一个顺序图 http en wikipedia org wiki Sequence diagram按顺序显示模块
  • Laravel Eloquent 截断数据类型 double

    Laravel 截断 double 类型的值 值 3 539363636363637 显示为3 5393636363636 我这样做 e Enrollment find 173 dd e gt value show 3 5393636363
  • Docker swarm:如何手动设置节点名称?

    有关我的环境的一些背景 我有 docker swarm 在 3 个 ubuntu 14 04 vagrant 盒子上运行 swarm master 在一台机器上运行 带有 consul 另外 2 台机器正在运行加入到 master 的 Sw
  • C# 数组列表的排列?

    我有一个 ArrayList myList 我正在尝试创建数组中值的所有排列的列表 示例 所有值都是字符串 myList 0 1 5 3 9 myList 1 2 3 myList 2 93 myList 的计数可以变化 因此它的长度事先未
  • 如何将Transaction对象转换为R中的Dataframe

    如何将 arules 包中的数据集 Groceries 转换为数据帧 class Groceries 1 transactions attr package 1 arules 您需要指定实际需要的内容 我没有看到as data frame
  • 尝试在空对象引用上调用虚拟方法“android.os.Looper android.content.Context.getMainLooper()”[重复]

    这个问题在这里已经有答案了 每当我尝试在手机或模拟器上打开应用程序时 我的 Log cat 都会收到此错误 为了让您概述我当前正在做的项目 它是一个记录连接到手机上接入点的设备数据的系统 可以通过屏幕上的按钮打开和关闭这些设备 我想归功于
  • 参数异常“已添加具有相同密钥的项目”

    我不断收到以下代码的错误 Dictionary
  • IntelliJ:让 GridLayout 工作

    我尝试在我的应用程序中使用 GridLayout 但它不起作用 我使用了这个教程 IntelliJ 和 android support v7 widget GridLayout https stackoverflow com questio
  • CMake:Visual Studio 15 2017 找不到 Visual Studio 的任何实例

    当我尝试安装 CMake 时出现错误 Visual Studio 15 2017 could not find any instance of Visual Studio 我使用的是 Windows 7 和 Visual Studio 20
  • D3 v4 调整缩放至中心

    有没有明显的d3 V4相当于V3d3 behavior zoom center width 2 height 2 syntax 我已经搜索过 大多数手动缩放的工作示例等都在 V3 中运行 并且 API 文档据我所知没有提及它 我正在尝试添加
  • 在 Rust 中使用 warp 提供静态文件

    我在用warp使用 Rust 制作 Web 应用程序的库 我正在尝试提供静态文件 我已阅读其文档Doc https docs rs warp 0 2 0 warp filters fs fn dir html 这是我的代码片段 use se
  • Angular 2错误提供的参数与调用目标的任何签名都不匹配

    我试图在单击按钮时调用 post api 但显示此错误 提供的参数与调用目标的任何签名都不匹配 Code changeStatus id this http post https localhost 44300 api apis Chang
  • 在 Ubuntu 上本地安装 nloptr 时出现问题

    我目前正在使用开源 R 和 ubuntu 为我的组织工作 问题是我们无法使用互联网 这意味着如果我想安装某些软件包或软件 我必须从其他电脑下载并将其传输到工作电脑 您现在可能已经知道 我在使用 R3 1 3 的 Ubuntu 12 04 上
  • 用于 mongodb ObjectId 创建时间

    The ObjectId用作 mongodb 文档中的默认键具有嵌入的时间戳 调用 objectid Generation time 返回一个日期时间对象 那么是否可以使用这个生成时间而不是保留单独的创建时间戳 您如何能够使用此嵌入时间戳按