我在文档的集合中有一些值。例如,我的密钥range
可以是:
10 - 29
30 - 39
40 - 49
这些都是字符串。我想以某种方式搜索(在MongoDB中)以10
开头并以49
结尾的字符串。我怎么能这样做?
我知道我应该将这些作为数字,但由于系统的创建结构,这是不可能的。
由于
答案 0 :(得分:2)
你是对的,最好的选择就是将这些数字建模为数字。但是,我最好(唯一)的替代建议是使用正则表达式搜索。 有关正则表达式搜索mongo和here的文档,请参阅here以创建范围表达式。
根据可能的范围,您的查询将类似于
db.collection.find( { range : /[1-4][0-9] - [1-4][0-9]/ } );
与您指定的范围选项[10 - 29, 30 - 39, 40 - 49]
相匹配。请注意,这也会匹配49 - 10
,因此如果问题中没有提及任何排除项,则需要强化该表达式。
注意正则表达式查询会产生性能成本,重新构建和使用内置的$gt $lt
函数肯定是可取的。