sql >> Base de Datos >  >> NoSQL >> MongoDB

El método funciona en desarrollo pero no en producción Rails MongoDB

Si tienes un Coupon modelo Mongoid, entonces la colección en el shell de MongoDB sería db.coupons . Eso explicaría por qué:

db.Coupon.insert(...)

en el shell de MongoDB no proporciona lo que espera encontrar en su código de Rails.

En cuanto al comentario de Neil sobre $exists frente a nil explícito los cheques van, creo que realmente quieres nil (también conocido como null dentro de MongoDB) comprobaciones. Considere esto en el shell de 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") }

Entonces tenemos una colección con documentos que tienen n , no tiene n , tener null explícito valores para n y no null valores para n .

Entonces podemos ver la diferencia entre consultas Mongoid como :n => nil :

> db.models.find({ n: null })
{ "_id" : ObjectId("571546e7ce2934dadf37947b"), "n" : null }
{ "_id" : ObjectId("571546ecce2934dadf37947c") }

y :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 }

y :n => { :$exists => false } :

> db.models.find({ n: { $exists: false } })
{ "_id" : ObjectId("571546ecce2934dadf37947c") }

Entonces el :expires_at => nil las consultas encontrarán documentos que no tienen un expires_at así como documentos donde expires_at se estableció explícitamente en nil . Ambos casos ocurrirán con Mongoid a menos que tenga cuidado de llamar a remove_attribute en lugar de asignar un nil y ambos casos significan "sin fecha de caducidad".