Проверка монгольских областей Если поле массива содержит значение
Решение для этого вопроса может показаться довольно простым, но я не махал рукой без ответа.
Я использую 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 просто сказать, что элемент должен быть равен заданному значению???.
Любые подсказки о том, как написать эту довольно простую область.
Привет!!!. Спасибо заранее.
Ответы
Ответ 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 не совсем ясны по этому поводу (или, по крайней мере, я не могу найти явного объяснения).