MongoDB 使用 Grails 的 WildCard 查询花费了太多时间
MongoDB WildCard query taking too much time using Grails
- MongoDB v4.0.2
- Grails 3.3.5
我在 collection 中存储了超过 2000 万条记录。我正在尝试在 collection 中进行通配符搜索,如下所示...
def personList = Person.collection.find(['vehicleNumber': ['$regex':/.*GJ18AD.*/] ]).sort(["datetime":-1])
人物索引Collection
db.person.getIndexes()
{
"v" : 2,
"key" : {
"vehicleNumber" : 1
},
"name" : "vehicleNumber_1",
"ns" : "analytics.person",
"weights" : {
"numberPlate" : 1
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 3
}
通配符搜索还有其他方法吗?
索引无需更改。但是我传递给集合的过滤器对象的微小变化。
以前,我使用以下过滤器对象语法:
def personList = Person.collection.find(['vehicleNumber': ['$regex':/.*GJ18AD.*/] ]).sort(['datetime':-1])
然后我只更改了上面语法中的正则表达式:
def personList = Person.collection.find(['vehicleNumber': ['$regex':'.*GJ18AD.*'] ]).sort(['datetime':-1])
它在 MongoDB 版本 4.2.1 中对我有用。
- MongoDB v4.0.2
- Grails 3.3.5
我在 collection 中存储了超过 2000 万条记录。我正在尝试在 collection 中进行通配符搜索,如下所示...
def personList = Person.collection.find(['vehicleNumber': ['$regex':/.*GJ18AD.*/] ]).sort(["datetime":-1])
人物索引Collection
db.person.getIndexes()
{
"v" : 2,
"key" : {
"vehicleNumber" : 1
},
"name" : "vehicleNumber_1",
"ns" : "analytics.person",
"weights" : {
"numberPlate" : 1
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 3
}
通配符搜索还有其他方法吗?
索引无需更改。但是我传递给集合的过滤器对象的微小变化。
以前,我使用以下过滤器对象语法:
def personList = Person.collection.find(['vehicleNumber': ['$regex':/.*GJ18AD.*/] ]).sort(['datetime':-1])
然后我只更改了上面语法中的正则表达式:
def personList = Person.collection.find(['vehicleNumber': ['$regex':'.*GJ18AD.*'] ]).sort(['datetime':-1])
它在 MongoDB 版本 4.2.1 中对我有用。