涵盖查询并查找全部(无过滤器)

时间:2015-07-22 14:58:20

标签: mongodb optimization indexing

我不确定是否有可能,我只是好奇。 我有一个区域集合,目的是加载到Web下拉列表。不是那里的大事。

{
    _id:"some numeric id",
    name:"region name",
}

并创建索引,如+ (instancetype)create { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _sharedClient = [[[self class] alloc] init]; }); return _sharedClient; } + (instancetype)sharedClient { if (!_sharedClient) { [GotItClient create]; } return _sharedClient; } - (id)init { self = [super init]; if (self) { NSURL *baseURL = [NSURL URLWithString:kSCGotItClientAPIURL]; NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"group.com.gotit.iphone.gotit"]; sessionConfiguration.sharedContainerIdentifier = @"group.com.gotit.iphone.gotit"; _networkManager = [[BDBOAuth1SessionManager alloc] initWithBaseURL:baseURL sessionConfiguration:sessionConfiguration consumerKey:kSCGotItClientKey consumerSecret:kSCGotItClientSecret shareDefaultGroupId:@"group.com.gotit.iphone.gotit"]; _networkManager.responseSerializer = [[AFJSONResponseSerializer alloc] init]; //4 operations at same time [[_networkManager operationQueue] setMaxConcurrentOperationCount:20]; } return self; }

我尝试了两个db.regions.createIndex({name:1})而没有排序。 使用db.regions.find({},{_id:0}).sort(name:1)显示explain大于零,这意味着如果我理解了这个概念,它就不是被覆盖的查询。

1 个答案:

答案 0 :(得分:1)

对于覆盖查询,您必须明确列出投影中的每个覆盖字段:

db.regions.find({}, {_id:0, name: 1}).sort(name:1)

如果您只排除_id,那么您告诉MongoDB除了_id之外还要包含所有字段。你知道你的所有文档都只有一个name字段,但是MongoDB没有,所以你必须明确。