【发布时间】:2019-12-22 04:34:46
【问题描述】:
我有一个巨大的收藏。我正在使用match 对我通过CASE 语句设置的值进行过滤。我可以在该文本值上创建索引吗?
这是我的查询:
db.col.aggregate([
{
'$match': {
'date': {
'$gte': '2019-07-15',
'$lte': '2019-08-14'
},
'xyz': 'abc'
},
},
{
'$group': {
'_id': {
'b_version': '$b',
'b_main':
{'$switch': {
'branches': [
{ 'case': {'$gt': [{'$indexOfCP': ['$b', "Google Plus"]} ,-1]}, 'then': 'GP' },
{ 'case': {'$gt': [{'$indexOfCP': ['$b', "Facebook"]} ,-1]}, 'then': 'FB' },
{ 'case': {'$gt': [{'$indexOfCP': ['$b', "Instagram"]} ,-1]}, 'then': 'IG' },
{ 'case': {'$gt': [{'$indexOfCP': ['$b', "Snapchat"]} ,-1]}, 'then': 'SC' },
],
'default': 'Other'
}
},
},
'b_ct': {'$sum': 1},
'starts': {'$sum': '$starts'},
'completes': {'$sum': '$completes'}
}
}, {
'$project': {
'_id': 0,
'b_version': '$_id.b_version',
'b_main': '$_id.b_main',
'b_ct': '$b_ct',
'starts': '$starts',
'completes': '$completes',
}
}, {'$match': {'b_main': 'SC'}},
{ '$sort': { 'b_main': 1, 'b_version': 1}, }
])
我想在b_main 上设置一个index。有没有办法做到这一点?我其实想把它设置在date, xyz and a text match on b_main
有可能吗?
【问题讨论】:
标签: mongodb indexing switch-statement match pymongo