Hvis du har en Coupon Mongoid-model, så ville samlingen i MongoDB-skallen være db.coupons . Det ville forklare hvorfor:
db.Coupon.insert(...)
i MongoDB-skallen giver ikke det, du forventer at finde i din Rails-kode.
For så vidt angår Neils kommentar om $exists versus eksplicit nil checks går, jeg tror virkelig, du vil have nil (AKA null inde i MongoDB) kontroller. Overvej dette i MongoDB-skallen:
> 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") }
Så vi har en samling med dokumenter, der har n , har ikke n , har eksplicit null værdier for n , og ikke-null værdier for n .
Så kan vi se forskellen mellem Mongoid-forespørgsler som :n => nil :
> db.models.find({ n: null })
{ "_id" : ObjectId("571546e7ce2934dadf37947b"), "n" : null }
{ "_id" : ObjectId("571546ecce2934dadf37947c") }
og :n.exists => true (AKA :n => { :$exists => true } ):
> db.models.find({ n: { $exists: true } })
{ "_id" : ObjectId("571546e1ce2934dadf379479"), "n" : 11 }
{ "_id" : ObjectId("571546e4ce2934dadf37947a"), "n" : 0 }
{ "_id" : ObjectId("571546e7ce2934dadf37947b"), "n" : null }
og :n => { :$exists => false } :
> db.models.find({ n: { $exists: false } })
{ "_id" : ObjectId("571546ecce2934dadf37947c") }
Så :expires_at => nil forespørgsler vil finde dokumenter, der ikke har en expires_at samt dokumenter, hvor expires_at blev udtrykkeligt sat til nil . Begge disse tilfælde vil ske med Mongoid, medmindre du er omhyggelig med at kalde remove_attribute i stedet for at tildele en nil og begge tilfælde betyder "ingen udløbsdato".