Rails, MySql, столбец JSON, в котором хранится массив UUID - необходимо сделать точное совпадение - PullRequest
0 голосов
/ 11 мая 2018

У меня есть модель, называемая списками, в которой есть столбец с именем 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!

Теперь, как мне проверить, существует ли список, чьи идентификаторы элементов точно совпадают с указанными взапрос?После не будет работать.

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

Похоже, это работает

1 Ответ

0 голосов
/ 11 мая 2018

Вы можете реализовать множество связей между списками и элементами, а затем обращаться к ним следующим образом.

List.include (: item) .where ('items.id in (?)', Item_ids)

Для реализации отношения has_many:

http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

...