Сложный запрос MongoMapper - PullRequest
1 голос
/ 19 марта 2012

Мне нужно выполнить следующий запрос - теги - это внутренний массив в моем документе, и мне нужно запрашивать документы, теги которых содержат «a» и «b» и («c» или «d»)

я могу сделать это с mongomapper?

Ответы [ 2 ]

1 голос
/ 19 марта 2012

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

db.test.find({$and:[{tags:'a'},{tags:'b'}, {$or:[{tags:'c'}, {tags:'d'}] }]})

С mongomapper, попробуйте это:

Test.where({
  "$and" => [
    :tags => 'a',
    :tags => 'b',
    "$or" => [:tags => 'c', :tags => 'd']
  ]
})
0 голосов
/ 19 марта 2012

На основе ответа mpobrien ... но с правильным синтаксисом:

Test.where(
  :tags.all => ['a', 'b'],
  :$and => [{:tags.in => ['c', 'd']}]
)

Или, точнее, Mongolike ...

Test.where(
  :tags => {
    :$all => ['a', 'b'],
    :$in  => ['b', 'c']
  }
)
...