我有一个包含大约 600k 文档的 mongo 集合。我正在枚举集合,按_id 排序。但是,文档不会按该排序顺序返回。它们似乎根据 ObjectId 的时间戳部分正确排序,但不是根据 pid 字段。
这是我用来重现这个的 c# 代码:
var cursor = m_collection.FindAll().SetSortOrder(SortBy.Ascending("_id"));
ObjectId previous = ObjectId.Empty;
foreach (var document in cursor)
{
var id = document[IdField].AsObjectId;
Throw.Assert(id > previous, "Sort order is invalid!");
previous = id;
}
在某些时候,断言被触发。我可以看到新的 id 与前一个具有相同的时间戳,但 pid 较低。
我原以为使用 {"_id":1} 进行排序将使用 ObjectIds 的所有组件进行排序,而不仅仅是时间戳。
服务器对 ObjectId 使用的比较算法是否与 C# 客户端的 ObjectId.CompareTo 不同?