Coupon
をお持ちの場合 Mongoidモデルの場合、MongoDBシェルのコレクションはdb.coupons
になります。 。それが理由を説明します:
db.Coupon.insert(...)
MongoDBシェルでは、Railsコードで期待するものが提供されていません。
$exists
に関するNeilのコメントに関する限り 対明示的なnil
チェックは行きます、私はあなたが本当にnil
を望んでいると思います (別名null
MongoDB内)チェック。 MongoDBシェルでこれを検討してください:
> db.models.insert({ n: 11 })
> db.models.insert({ n: 0 })
> db.models.insert({ n: null })
> db.models.insert({ })
> db.models.find()
{ "_id" : ObjectId("571546e1ce2934dadf379479"), "n" : 11 }
{ "_id" : ObjectId("571546e4ce2934dadf37947a"), "n" : 0 }
{ "_id" : ObjectId("571546e7ce2934dadf37947b"), "n" : null }
{ "_id" : ObjectId("571546ecce2934dadf37947c") }
したがって、n
を持つドキュメントを含むコレクションがあります。 、n
はありません 、明示的なnull
があります n
の値 、およびnull
以外 n
の値 。
次に、:n => nil
のようなMongoidクエリの違いを確認できます。 :
> db.models.find({ n: null })
{ "_id" : ObjectId("571546e7ce2934dadf37947b"), "n" : null }
{ "_id" : ObjectId("571546ecce2934dadf37947c") }
および:n.exists => true
(別名:n => { :$exists => true }
):
> db.models.find({ n: { $exists: true } })
{ "_id" : ObjectId("571546e1ce2934dadf379479"), "n" : 11 }
{ "_id" : ObjectId("571546e4ce2934dadf37947a"), "n" : 0 }
{ "_id" : ObjectId("571546e7ce2934dadf37947b"), "n" : null }
および:n => { :$exists => false }
:
> db.models.find({ n: { $exists: false } })
{ "_id" : ObjectId("571546ecce2934dadf37947c") }
したがって、:expires_at => nil
クエリは、expires_at
を持たないドキュメントを検索します およびexpires_at
が存在するドキュメント 明示的にnil
に設定されました 。 remove_attribute
を注意深く呼び出さない限り、これらの両方のケースはMongoidで発生します。 nil
を割り当てる代わりに どちらの場合も「有効期限なし」を意味します。