MongoDB使用db.things.find(“j!= 3&& k> 10”)vs db.things.find({j:{$ ne:3},k:{$ gt:10}})

时间:2010-09-25 06:54:40

标签: mongodb mongoid

我一直在使用MongoDB和Ruby驱动程序以及Mongoid和行

db.things.find({j: {$ne: 3}, k: {$gt: 10} });
看起来很奇怪,很难记住。为什么不使用解析器:

db.things.find("j != 3 && k > 10")

哪些可以自动转换为所需的形式? (或其内部使用的任何形式)。

3 个答案:

答案 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 ))