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".