ruby - 你如何用 Mongoid 编写 "(A OR B) AND (A OR C)"查询?

标签 ruby mongoid

我需要编写一个格式为“A OR B OR (C AND D)”的 MongoDB 查询来返回一些记录。我们使用 Mongoid 来访问我们的模型。

我将该查询扩展为“(A OR B OR C) AND (A OR B OR D)”,并希望像这样使用 Mongoid 的条件方法 any_of:Model.any_of (A, B, C).any_of(A, B, D) 会完成我想要的,但在发送到数据库之前会扩展为“A OR B OR C OR A OR B OR D” .

有没有一种方法可以构建此查询,或者我是否必须构建一个查询来执行 A OR B 而另一个查询来执行 C AND D 并将它们合并?

最佳答案

(编辑:我刚刚注意到这个问题已有 3 年历史了。我不知道它为什么会出现。)

你想要这样的东西:

Model.any_of(a, b, c)

其中 abc 是选择器文档(请记住,它们与多个子句进行 AND 运算)。

例如,如果您的查询是:

{a: 1}
{b: 1}
{c: 1, d: 1}

然后你会使用:

Model.any_of( {a: 1}, {b: 1}, {c: 1, d: 1} )

这将生成如下查询:

models.find({$or: [{a: 1}, {b: 1}, {c: 1, d: 1}]})

关于ruby - 你如何用 Mongoid 编写 "(A OR B) AND (A OR C)"查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3857649/

相关文章:

inheritance - mongoid 继承问题

MongoDB 过滤器(如果所有键都作为字段存在)

ruby-on-rails - MongoDB/MongoID 多键专项查询

ruby - Sinatra 构建 REST API 文档

ruby-on-rails - 使用 File.open 写入 YAML 文件会换行更长的行

ruby-on-rails - 是否有专门针对 rails 5.2.3 的 Rubocop 配置?

ruby - 从 Ruby Gem 中排除大型测试文件的最佳实践

ruby-on-rails-3 - Rails/ActiveModel 将参数传递给 EachValidator

json - Rail 4 为 POST、PUT、DELETE JSON 请求设计 nil current_user

ruby-on-rails - 在ActiveRecord子类中覆盖 '=='方法有意义吗?