在了解了有关索引如何在MongDB上工作的更多信息后,我决定改进一个查询,该查询在几个月内将在我正在进行的项目中使用。基本上该集合具有以下结构:
{
_id: UUID("0f8fad5b-d9cb-469f-a165-70867728950e"),
Title: "ABC",
BookId: UUID("7c9e6679-7425-40de-944b-e07fc1f90ae7"),
UserId: UUID("7c9e6579-7425-40de-944b-e07fc1f90az9"),
ModificationDate: ISODATE(...),
...
...
}
查询将有两种主要格式:
该应用仅使用BookId和UserId进行过滤
db.userBooks.find({BookId: UUID("7c9e6679-7425-40de-944b-e07fc1f90ae7"), UserId: UUID("7c9e6579-7425-40de-944b-e07fc1f90az9")});
该应用现在正在使用BookId,UserId和ModificationDate进行过滤
db.userBooks.find({BookId: UUID("7c9e6679-7425-40de-944b-e07fc1f90ae7"), UserId: UUID("7c9e6579-7425-40de-944b-e07fc1f90az9"), ModificationDate: {$qt: "2015-08-30: 10:25:00.100}});
对于这种情况,我在我的集合中创建了一个这样的索引:
db.UserBooks.createIndex({BookId: 1, UserId: 1, ModificationDate: -1})
之后,我使用了Explao()在Mongo Shell上使用BookId和UserId运行了一个查询,令我惊讶的是没有使用新的索引!我现在不上班,所以我不能在这里发布可解释的结果,但我可以说它在20.000键和文件上做了一个COLLSCAN!
我试图在网上寻找答案,找不到太多东西。我发现的是MongoDB与GUID类型不兼容。这提出了几个问题:
1:MongoDB真的不喜欢“GUID”吗?
2:对GUID类型的升序或降序排序没有“意义”。那么,当我在这些类型上创建索引时,我应该始终指定1:升序吗?有关系吗?
3:查询Mongo Shell上具有GUID的集合时,它们显示为BinaryData(哈希)。为什么?
此特定应用程序具有SQL Server数据库。当我们有突变数据或需要非常快速的访问时,我们在某些情况下使用MongoDB。这些GUID类型是SQL Server数据库中的Id。有谁知道如何解决这个问题?还是指点我的方向?
答案 0 :(得分:1)