21

我对 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]}),但效果相同。

怎么了?如何在 mongoid 中使用“不在”状态?

PS,“第二个”没问题,“第一个”测试通过,因为 id=1

4

2 回答 2

44

试试这个查询:

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

在 MongoDB 中,主键具有 name _id。Mongoid 试图变得友好,并通过id在对象模型中将其别名化来部分地向开发人员隐藏这一事实。但是当您进行查询时,它无法判断您想要主键_id还是某个完全普通的字段id

于 2012-05-09T00:30:03.493 回答
14
user = User.where(:id.nin => [2,3,4,5])

这是根据 mongoid 官方文档:http ://mongoid.org/en/origin/docs/selection.html

于 2015-03-26T12:00:31.497 回答