使用长度标准查询MongoDB

时间:2011-02-09 21:26:00

标签: ruby-on-rails mongodb mongoid

我在MongoDB Collection中有几个文件,带有一个字段'name'(字符串)。

如何执行7 <= name.length <= 14

等查询

4 个答案:

答案 0 :(得分:13)

您可以使用JavaScript expression

User.where("this.name.length >= 7 && this.name.length <= 14")

答案 1 :(得分:12)

Mongo提供了一些使用长度标准执行查询的方法 - $where$regex是两个很好的选项,但我建议使用$regex,因为查询效果更好。

$where (较慢)

接受JavaScript表达式或查询中的函数

示例:

db.collection.find({ $where: 'this.name.length >= 7 && this.name.length <= 14' })

注意:$where运算符不会利用您的数据库索引,从而导致查询速度变慢。 - Source

$regex (更快)

为查询中的模式匹配字符串提供正则表达式功能

示例:

db.collection.find({ name: { $regex: /^.{7,14}$/ } })

注意:$regex运算符利用您的数据库索引,从而提高查询速度(如果您的集合已正确编入索引)。 - Source

答案 2 :(得分:4)

您可以使用MongoDB的$ where query参数将javascript提交给服务器。 。E.g,:

db.myCollection.find( {$where: "(7 <= this.name.length) && (this.name.length <= 14)"} )

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-JavascriptExpressionsand%7B%7B%24where%7D%7D

答案 3 :(得分:0)

$where查询效率不高。 MongoDB

如果这是经常执行的查询,您可能希望将长度存储在单独的字段中。 Denormalization