我有这样的查询:
xml_db.find(
{
'high_performer': {
'$nin': [some_value]
},
'low_performer': {
'$nin': [some_value]
},
'expiration_date': {
'$gte': datetime.now().strftime('%Y-%m-%d')
},
'source': 'some_value'
}
)
我尝试使用这些字段创建索引,但出现错误:
pymongo.errors.OperationFailure:无法索引并行数组[low_performer] [high_performer]
那么,如何有效地运行此查询?
答案 0 :(得分:1)
化合物索引的排序应遵循equality --> sort --> range
规则。可以在this响应中找到对此的良好描述。
这意味着索引中的第一个字段为source
,后跟范围过滤器(expiration_date
,low_performer
和high_performer
)。
您已经注意到,索引中不能包含“性能”字段之一,因为只能对单个数组进行索引。您应该利用对数据集的了解来确定哪个过滤器(low_performer
或high_performer
)更具选择性,并选择要包含在索引中的过滤器。
假设high_performer
更具选择性,剩下的唯一步骤是确定expiration_date
和high_performer
之间的顺序。同样,您应该使用对数据集的了解来基于选择性进行此确定。
假设expiration_date
更具选择性,那么要创建的索引将是:
{ "source" : 1, "expiration_date" : 1, "high_performer" : 1 }