Mongoid 不在查询中

Posted

技术标签:

【中文标题】Mongoid 不在查询中【英文标题】:Mongoid not in query 【发布时间】:2012-05-17 12:15: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

【问题讨论】:

【参考方案1】:
user = User.where(:id.nin => [2,3,4,5])

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

【讨论】:

【参考方案2】:

试试这个查询:

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

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

【讨论】:

以上是关于Mongoid 不在查询中的主要内容,如果未能解决你的问题,请参考以下文章

修改 rails mongoid 查询中的值

Mongoid OR 查询语法

关联模型上的 Mongoid 2d 查询

Mongoid / Mongodb 和查询嵌入文档

MongoDB对HABTM关系(Mongoid,RoR)的条件聚合查询?

RoR3 上的 Mongoid:1)如何在查询中返回特定字段? 2)需要啥 inverse_of ?