Ако имате Coupon Mongoid модел, тогава колекцията в обвивката на MongoDB ще бъде db.coupons . Това обяснява защо:
db.Coupon.insert(...)
в обвивката на MongoDB не предоставя това, което очаквате да намерите във вашия код на Rails.
Що се отнася до коментара на Нийл за $exists спрямо изрично 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 .
След това можем да видим разликата между Mongoid заявки като :n => nil :
> 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 . И двата случая ще се случат с Mongoid, освен ако не внимавате да извикате remove_attribute вместо да присвоите nil и двата случая означават "без дата на изтичане".