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で「notin」状態を使用するにはどうすればよいですか?

PS、id = 1であるため、「最初の」テストに合格し、「2番目」は問題ありません。

4

2 に答える 2

44

このクエリを試してください:

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

MongoDBでは、主キーの名前は_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 に答える