2012-05-09 11 views
17

ho qualche difficoltà con mongoid:non Mongoid nella query

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 

Test fallito. Ho provato a usare where (: id => {'$ nid' => [2]}), ma ha lo stesso effetto.

Cosa c'è che non va? Come usare la condizione "non in" con mongoid?

PS, "secondo" è ok, con la prova "prima" passata, perché id = 1

risposta

34

Prova questa ricerca:

user = User.not_in(:_id => [2]).second 

In chiave primaria MongoDB ha nome _id. Mongoid prova ad essere amichevole e nasconde parzialmente questo fatto dallo sviluppatore aliasandolo a id nel modello a oggetti. Ma quando fai una query, non può sapere se vuoi la chiave primaria _id o qualche campo completamente ordinario id.