MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Método funciona em desenvolvimento mas não em produção Rails MongoDB


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