Монгоид не в запросе
У меня есть некоторые проблемы с mongoid:
test "Test candidate" do
User.create(:id => 1, :sex => User::Male, :country => 1, :city => 1)
User.create(:id => 2, :sex => User::Female, :country => 1, :city => 1)
User.create(:id => 3, :sex => User::Female, :country => 1, :city => 1)
user = User.not_in(:id => [2]).second
assert_not_equal(user.id, 2)
end
Тест завершился неудачно. Я попытался использовать where (: id = > {'$ nid' = > [2]}), но он имеет тот же эффект.
Что не так? Как использовать условие "не в" с мангоидом?
PS, "second" в порядке, с "первым" испытанием прошло, потому что id = 1
Ответы
Ответ 1
Попробуйте этот запрос:
user = User.not_in(:_id => [2]).second
В первичном ключе MongoDB есть имя _id
. Монгоид пытается быть дружелюбным и частично скрывает этот факт от разработчика, наложив его на id
в объектной модели. Но когда вы выполняете запросы, он не может определить, нужен ли вам первичный ключ _id
или какое-то полностью обычное поле id
.
Ответ 2
user = User.where(:id.nin => [2,3,4,5])
Это согласно официальному документу mongoid: http://mongoid.org/en/origin/docs/selection.html