Model.where(:id.ne => nil)
などと書けるやつ。 MongoMapper の独自拡張で、 mongo-ruby-driver 直で使う場合は通らない。
[3] pry(main)> :id.ne
#<SymbolOperator:0x00007fb64e33a660 @field=:id, @operator="ne">
[4] pry(main)> :id.ne.class
SymbolOperator < Object
[5] pry(main)> :id.ne.class.ancestors
[
[0] SymbolOperator < Object,
[1] Comparable,
[2] Object < BasicObject,
[3] ActiveSupport::Dependencies::Loadable,
[4] PP::ObjectMixin,
[5] MongoMapper::Extensions::Object,
[6] JSON::Ext::Generator::GeneratorMethods::Object,
[7] Kernel,
[8] BasicObject
]
ってなってるけど、 SymbolOperator が定義されてるのは Plucky gem のほう https://github.com/mongomapper/plucky/blob/master/lib/plucky/extensions/symbol.rb
Symbol に .ne
メソッドなどをはやしていて、そのメソッドの返り値が SymbolOperator のインスタンス。という具合。
ショートハンドで書けて便利かと思いきや、 mongo-ruby-driver 直で使いたい場合の書き換えでミスりやすいので、 .where(:id => { '$ne' => nil })
みたいに書くようにしたほうがよさそう。