Подтвердить что ты не робот

Проверка монгольских областей Если поле массива содержит значение

Решение для этого вопроса может показаться довольно простым, но я не махал рукой без ответа.

Я использую Mongoid в своем Rails 4.1.4 приложении. У меня есть модель, которая содержит поле Array, в котором будут храниться значения String.

Мне нужна область Mongoid в модели для извлечения тех экземпляров, где это поле Array содержит определенное значение String, заданное в качестве параметра области. Скажем, у нас есть эта модель:

class SomeModel
  include Mongoid::Document
  include Mongoid::Timestamps

  field :some_array, type: Array, default: Array.new

  scope :some_scope, ->(value){ elem_match(some_array: value) }

end

Вышеуказанная область действия не работает, поскольку, очевидно, в MongoDB $elemMatch необходимо получить Критерии как значение. Но как бы Criteria просто сказать, что элемент должен быть равен заданному значению???.

Любые подсказки о том, как написать эту довольно простую область.

Привет!!!. Спасибо заранее.

4b9b3361

Ответ 1

Вы сильно сложны. Если поле содержит массив, вы можете искать его, как если бы он не был массивом. Например, если у вас есть это в документе:

{ some_array: [ 'where', 'is', 'pancakes', 'house?' ] }

и вы выполните такой запрос:

where(:some_array => 'pancakes')

вы найдете этот документ. Вам не нужно $elemMatch или что-то сложное здесь; вы можете притворяться, что массив является единственным значением для простых запросов, как у вас:

scope :some_scope, ->(value) { where(:some_array => value) }

Вам нужно только войти в $elemMatch, если вы хотите применить несколько условий к каждому элементу массива, например, из $elemMatch docs:

   results: { $elemMatch: { $gte: 80, $lt: 85 } }
// ^^^^^^^array           ^^^^^^^^^^^^^^^^^^^^^multiple conditions

Не чувствую себя плохо, текущие документы MongoDB не совсем ясны по этому поводу (или, по крайней мере, я не могу найти явного объяснения).