在创建简单的 MongoDB 查询时,我对查询中的条件排序有疑问- 例如(Mongoose.js 语法):
conditions = { archived: false, first_name: "Billy" };
对比
conditions = { first_name: "Billy", archived: false };
..在一个简单的 find() 函数中:
User.find(conditions, function(err, users) { <some logic> });
..假设一个简单的单键索引策略:
UserSchema.index( { first_name: 1, archived: 1} );
..上面列出的条件的顺序是否重要?
重要提示:我知道复合索引的顺序确实很重要,但如上所述,我对单键索引查询感到好奇。既然我们在这里,也对完全非索引查询的情况感兴趣。:)
替代解释:换一种说法,假设 100User
秒(50 已存档,50 未存档),给定两种可能的内部 MongoDB 搜索策略:
- 首先过滤掉所有 50 个
archived
用户,然后搜索剩余 50 个first_name
值为“Billy”的未归档用户 - 首先在所有 100 个
User
文档中搜索first_name
值“Billy”,然后通过删除任何已归档的 Billys 来过滤找到的对象。
..我会假设#1更快(在具有两个以上条件的大型查询中可能更快)。但不管哪个更快,为什么,其中之一肯定是。
核心问题:在庞大而强大的复合索引世界之外,MongoDB 是否知道如何自动执行其最高效/快速的搜索/过滤器,而不管哪些字段和哪种排序?或者我们是否需要以编程方式告诉系统什么是最好的(通过呈现的条件顺序等)?