У меня есть следующее определение дока (это рубин)MongoDB: массив запросов в внедренном документе
class Block
include Mongoid::Document
field :index, type: Integer # index 0,1,..
field :codes, type: Array #[A, B, C,... ]
embedded_in :Video
end
class Video
include Mongoid::Document
field :name, type: String
embeds_many :blocks, :order => :index.asc
end
Я хочу запросить соответствие свойства video.blocks.codes
, но это свойство массив встроенного дока. Я в основном хочу делать два типа запросов:
- Сколько блоков существует с ненулевым/непустым массивом
codes
? - Сколько блоков существует, когда массив кодов соответствует определенной строке в заданной позиции?
Вот пример данных я пытаюсь соответствовать:
video#1
blocks: [{index: 1, codes:["a","g","c"]}, {index: 2, codes: [] }]
video#2
blocks: [{index: 1, codes:["x","b","d", "e"]}, {index: 2, codes: ["x","b"] }]
Например, я хочу знать , сколько блоков есть без непустых кодов массива (ответ является три блока) и сколько блоков есть с b
во втором положении (индекс 1) (ответ есть два).
Я использую драйвер mongoid
, поэтому в идеале запрос будет использовать драйвер, но обычное манго в порядке. Благодаря!
Я знаю, что должен иметь его в отдельной коллекции, но я этого не делаю; Я не могу изменить схему прямо сейчас. Вот почему я спрашиваю SO :). Но спасибо за ваш ответ. –
Вы не можете изменить способ хранения вещей в MongoDB или только схему ваших входных данных? (или оба?) – Matt
Я не могу ничего изменить. –