mongodb中Criteria转换为es条件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb中Criteria转换为es条件相关的知识,希望对你有一定的参考价值。

参考技术A 可以用mongdbTemplate,elasticSearchTemplate。
MongoDB与Elasticsearch都属于文档型数据库,Bson类同与Json,_objectid与_id原理一样。
所以主数据与从数据迁移到Elasticsearch平台,数据模型几乎无需变化。

Ruby on Rails - Criteria - Mongoid - where 条件为 2 x 2 列

【中文标题】Ruby on Rails - Criteria - Mongoid - where 条件为 2 x 2 列【英文标题】:Ruby on Rails - Criteria - Mongoid - where condition with 2 by 2 columns 【发布时间】:2021-03-10 03:39:04 【问题描述】:

我正在使用 RoR + MongoDB (Mongoid),我需要使用 2 列或条件来应用过滤器。

我看到了一些类似这样的建议,但没有奏效。

query = query.where(name: /#attributes[:name]/i).or(query.where(email: /#attributes[:email]/i))

如果我使用这个,看起来 or 将适用于所有条件:

query = query.where(name: /#attributes[:name]/i).or(email: /#attributes[:email]/i)

有人有什么建议吗?

【问题讨论】:

这些查询会产生什么?您想要的结果是什么? 我得到的结果是:SELECT * FROM people WHERE name LIKE '%mateus%' OR email LIKE '%mateus%' 我想要这个结果:SELECT * FROM people WHERE (name LIKE '%mateus %' OR email LIKE '%mateus%') 我需要将“OR”仅应用于姓名和电子邮件,而不应用于其后应用的条件。 这已经是Mongoid的行为了。 【参考方案1】:

据我了解,正确的查询应该是:

query = query.or([name: /#attributes[:name]/, email: /#attributes[:email]/i])

这将返回具有name 属性且值来自attributes[:name] 的文档或具有email 属性且值来自attributes[:email] 的文档

这能回答你的问题吗?

【讨论】:

以上是关于mongodb中Criteria转换为es条件的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB常用操作--集合3

Ruby on Rails - Criteria - Mongoid - where 条件为 2 x 2 列

mongoDB 更新数据

mongodb的更新操作符

Mongodb数据更新命令(updatesave)

MongoDB中关于查询条件中包括集合中字段的查询