0

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

db.things.find({j: {$ne: 3}, k: {$gt: 10} });

只是看起来很奇怪,很难记住。为什么不使用解析器:

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

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

4

3 回答 3

2

作为替代方案,实现具有流畅界面的查询构建器不会太困难。不确定 Ruby 驱动程序是否已经包含一个,但 Java 版本有

DBObject condObj =
   QueryBuilder.start("numberOfPageHits").greaterThan(10)
      .and("name").regex(regExp).get();
于 2010-09-25T08:15:38.487 回答
1

看看http://github.com/RedBeard0531/MongoMagic。它是用 python 编写的,但应该很容易翻译成 ruby​​。您的查询将如下所示:

db.things.find(AND( M.j != 3 , M.k > 10 ))
于 2010-09-26T17:52:56.683 回答
1

MongoDB 支持语句中的 JavaScript 表达式find()。请注意:

Javascript 的执行速度比本地运算符慢 [...] 但非常灵活。

JavaScript 表达式字符串被解析为实际的 JavaScript 一次,然后针对每个文档进行评估。

但是,JavaScript 不会转换为原生运算符,例如{ $ne: 3 }. 原因是不是所有的 JavaScript 都可以使用本地操作符来表达

因为它无法将表达式转换为本机运算符,所以它(可能)也不知道要使用哪些索引。因此,JavaScript 表达式可能比原生运算符慢一些。

于 2010-09-25T07:12:49.360 回答