MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Die Methode funktioniert in der Entwicklung, aber nicht in der Produktion von Rails MongoDB

Wenn Sie einen Coupon haben Mongoid-Modell wäre dann die Sammlung in der MongoDB-Shell db.coupons . Das würde erklären warum:

db.Coupon.insert(...)

in der MongoDB-Shell bietet nicht das, was Sie in Ihrem Rails-Code erwarten.

Soweit Neils Kommentar zu $exists gegenüber explizitem nil Schecks gehen, ich denke, Sie wollen wirklich nil (AKA null innerhalb von MongoDB) überprüft. Betrachten Sie dies in der MongoDB-Shell:

> 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") }

Wir haben also eine Sammlung mit Dokumenten, die n haben , haben kein n , haben explizit null Werte für n , und nicht-null Werte für n .

Dann können wir den Unterschied zwischen mongoiden Abfragen wie :n => nil sehen :

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

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

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

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

Also :expires_at => nil Abfragen finden Dokumente, die kein expires_at haben sowie Dokumente mit expires_at explizit auf nil gesetzt wurde . Beide Fälle treten bei Mongoid auf, es sei denn, Sie achten darauf, remove_attribute aufzurufen anstatt einen nil zuzuweisen und beide Fälle bedeuten "kein Ablaufdatum".