Ако имате 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
и двата случая означават "без дата на изтичане".