mysql - 存储 UUID 数组的 Rails、MySql、JSON 列 - 需要完全匹配
问题描述
我有一个名为列表的模型,它有一个名为item_ids
. item_ids
是一个 JSON 列 (MySQL),该列包含 UUID 数组,每个都指向一个项目。
现在,当有人创建新列表时,我需要搜索是否存在具有相同 UUID 集的现有列表,并且我想使用查询本身进行此搜索以获得更快的响应。也尽可能使用 ActiveRecord 查询。
我如何实现这一目标?
item_ids = ["11E85378-CFE8-39F8-89DC-7086913CFD4B", "11E85354-304C-0664-9E81-0A281BE2CA42"]
v = List.new(item_ids: item_ids)
v.save!
现在,我如何检查是否存在与查询中提到的项目 id 完全匹配的列表?以下不会工作。
list_count = List.where(item_ids: item_ids).count
编辑 1
List.where("JSON_CONTAINS(item_ids, ?) ", item_ids.to_json).count
此语句有效,但即使只有一项匹配,它也会计数。寻找确切的项目数量。
编辑 2
List.where("JSON_CONTAINS( item_ids, ?) and JSON_LENGTH(item_ids) = ?", item_ids.to_json, item_ids.size).count
看起来这很有效
解决方案
您可以在列表和项目之间实现一个有很多关系,然后像这样访问。
List.includes(:item).where('items.id in (?)',item_ids)
要实现 has_many 关系:
http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association
推荐阅读
- java - 引起:java.net.ConnectException:连接被拒绝:连接
- angular - 如何等待订阅完成 Angular 5?
- php - 每次点击加载更多产品
- jira - Jira 中的 JQL 查询搜索
- azure - 我们不同办公室的内部 DNS 设置,但我正在考虑使用 Azure 私有 DNS 服务器是否有意义
- react-native - 在 React Native 中导入 yaml 文件导致数字 1 而不是实际内容
- tensorflow - Raspberrypi W 中的 PiCamera mmal 错误为零
- python - 删除 str 用户输入指示的文件中的行
- javascript - 在 web worker 中只读的 createElement
- c# - Azure 函数未记录自定义事件、对应用洞察的依赖关系