Может ли Mongoid `any_of` включать использование внешних связей документа? - PullRequest
2 голосов
/ 23 мая 2011

Я использую MongoDB с Mongoid и пытаюсь использовать элементарный поиск в качестве заполнителя, прежде чем мы рассмотрим взвешивание и т. Д. Метод any_of, кажется, находит мои встроенные документы, но не связанные с отношениями. Кто-нибудь знает, может ли any_of включать отношения с другими документами в БД, и если да, то какой будет синтаксис?

belongs_to :principal #owner
belongs_to :account #owner

scope :search, ->(text) { any_of(
  {:description => /#{text}/i}, 
  {:name => /#{text}/i}, 
  {"entries.title" => /#{text}/i}, 
  {"entries.description" => /#{text}/i}, 
  {:tags => /#{text}/i}, 
  {"account.name" => /#{text}/i},  # Not finding by account name - because account isn't embedded?
  {"principal.name" => /#{text}/i} # Not finding by principal name - because not embedded?
)}

1 Ответ

2 голосов
/ 23 мая 2011

Нет, any_of является эквивалентом запроса MongoDB $ или , поэтому собственный MongoDB будет выглядеть примерно так:

db.collection.find(
{ "text" :
  { "$or" :
    [ { "account.name" => /#{text}/i }, { "principal.name" => /#{text}/i } ]
  }
})

Запросы Mongo выполняются тольконад одной коллекцией, поэтому для разрешения полей account.name и principal.name их необходимо встроить в документ, например

{
    text:
    {
        description: "...",
        name: "...",
        account: { name: "..." },
        principal: { name: "..." }
    }
}
...