MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Il metodo funziona in fase di sviluppo ma non in produzione Rails MongoDB

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