Se você tiver um
Coupon
Mongoid, então a coleção no shell do MongoDB seria db.coupons
. Isso explicaria o porquê:db.Coupon.insert(...)
no shell do MongoDB não está fornecendo o que você espera encontrar em seu código Rails.
Quanto ao comentário de Neil sobre
$exists
versus explícito nil
verifica, acho que você realmente quer nil
(AKA null
dentro do MongoDB). Considere isso no shell do 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") }
Então temos uma coleção com documentos que possuem
n
, não tem n
, tem null
explícito valores para n
, e não null
valores para n
. Então podemos ver a diferença entre consultas Mongoid como
: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") }
Portanto, o
:expires_at => nil
consultas encontrarão documentos que não têm um expires_at
bem como documentos onde expires_at
foi explicitamente definido como nil
. Ambos os casos acontecerão com o Mongoid, a menos que você tenha o cuidado de chamar remove_attribute
em vez de atribuir um nil
e ambos os casos significam "sem data de expiração".