【发布时间】:2011-12-06 19:30:59
【问题描述】:
我在文档的集合中有一些值。比如我的密钥range可以是:
10 - 2930 - 3940 - 49
这些都是字符串。我想以某种方式搜索(在 MongoDB 中)以 10 开头并以 49 结尾的字符串。我该怎么做?
我知道我应该将这些作为数字,但由于系统创建方式的结构,这是不可能的。
谢谢
【问题讨论】:
我在文档的集合中有一些值。比如我的密钥range可以是:
10 - 2930 - 3940 - 49这些都是字符串。我想以某种方式搜索(在 MongoDB 中)以 10 开头并以 49 结尾的字符串。我该怎么做?
我知道我应该将这些作为数字,但由于系统创建方式的结构,这是不可能的。
谢谢
【问题讨论】:
您是对的,最好的选择是将这些建模为数字。但是,我最好的(唯一)替代建议是使用正则表达式搜索。 请参阅 here 了解有关 mongo 的正则表达式搜索的文档,以及有关创建范围表达式的 here 文档。
根据可能的范围,您的查询将类似于
db.collection.find( { range : /[1-4][0-9] - [1-4][0-9]/ } );
与您指定的范围选项 [10 - 29, 30 - 39, 40 - 49] 匹配。请注意,这也将匹配 49 - 10 例如,因此如果问题中未提及任何排除项,则需要加强该表达式。
注意正则表达式查询是以性能为代价的,重构和使用内置的$gt $lt 函数当然是可取的。
祝你好运!
【讨论】:
^ 开头),否则索引将不起作用。