Se hai un Coupon
Modello Mongoid, quindi la raccolta nella shell MongoDB sarebbe db.coupons
. Questo spiegherebbe perché:
db.Coupon.insert(...)
nella shell MongoDB non fornisce ciò che ti aspetti di trovare nel codice Rails.
Per quanto riguarda il commento di Neil su $exists
rispetto a nil
esplicito i controlli vanno, penso che tu voglia davvero nil
(AKA null
all'interno di MongoDB) controlli. Consideralo nella shell 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") }
Quindi abbiamo una collezione con documenti che hanno n
, non hai n
, hanno esplicito null
valori per n
e non null
valori per n
.
Quindi possiamo vedere la differenza tra le query Mongoid come :n => nil
:
> db.models.find({ n: null })
{ "_id" : ObjectId("571546e7ce2934dadf37947b"), "n" : null }
{ "_id" : ObjectId("571546ecce2934dadf37947c") }
e :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 }
e :n => { :$exists => false }
:
> db.models.find({ n: { $exists: false } })
{ "_id" : ObjectId("571546ecce2934dadf37947c") }
Quindi il :expires_at => nil
le query troveranno documenti che non hanno un expires_at
così come i documenti in cui expires_at
è stato esplicitamente impostato su nil
. Entrambi questi casi si verificheranno con Mongoid a meno che tu non stia attento a chiamare remove_attribute
invece di assegnare un nil
ed entrambi i casi significano "nessuna data di scadenza".