我一直在使用MongoDB和Ruby驱动程序以及Mongoid和行
db.things.find({j: {$ne: 3}, k: {$gt: 10} });
看起来很奇怪,很难记住。为什么不使用解析器:
db.things.find("j != 3 && k > 10")
哪些可以自动转换为所需的形式? (或其内部使用的任何形式)。
答案 0 :(得分:2)
作为替代方案,使用流畅的接口实现查询构建器并不太难。不确定Ruby驱动程序是否已包含一个,但Java版本
DBObject condObj =
QueryBuilder.start("numberOfPageHits").greaterThan(10)
.and("name").regex(regExp).get();
答案 1 :(得分:1)
MongoDB支持JavaScript expressions in find()
statements。请注意:
Javascript执行速度比本机运算符慢[...],但非常灵活。
JavaScript表达式字符串被解析为实际的JavaScript一次,然后针对每个文档进行评估。
但是,JavaScript不会转换为本机运算符,例如{ $ne: 3 }
。原因是并非所有JavaScript都可以使用本机运算符表示。
因为它无法将表达式转换为本机运算符,所以它(可能)也不知道要使用哪些索引。因此,JavaScript表达式可能比本机运算符慢一些。
答案 2 :(得分:1)
看看http://github.com/RedBeard0531/MongoMagic。它用python编写,但应该很容易转换为ruby。您的查询看起来像这样:
db.things.find(AND( M.j != 3 , M.k > 10 ))