sql >> Databáze >  >> NoSQL >> MongoDB

Metoda funguje ve vývoji, ale ne ve výrobě Rails MongoDB

Pokud máte Coupon Mongoidní model, pak by kolekce v prostředí MongoDB byla db.coupons . To by vysvětlovalo proč:

db.Coupon.insert(...)

v shellu MongoDB neposkytuje to, co očekáváte, že najdete v kódu Rails.

Pokud jde o Neilův komentář o $exists versus explicitní nil kontroly, myslím, že opravdu chcete nil (AKA null uvnitř MongoDB) kontroluje. Zvažte to v prostředí 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") }

Máme tedy kolekci s dokumenty, které mají n , nemají n , mají explicitní null hodnoty pro n a non-null hodnoty pro n .

Pak můžeme vidět rozdíl mezi mongoidními dotazy jako :n => nil :

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

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

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

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

Takže :expires_at => nil dotazy najdou dokumenty, které nemají expires_at stejně jako dokumenty, kde expires_at byl explicitně nastaven na nil . Oba tyto případy nastanou s Mongoidem, pokud nebudete opatrní při volání remove_attribute místo přiřazení nil a oba případy znamenají „žádné datum vypršení platnosti“.




  1. Filtrování RokMěsíc z dokumentu Mongo

  2. Jak naslouchat změnám v kolekci MongoDB?

  3. Časový limit balancéru MongoDB se zpožděnou replikou

  4. Pokud je Mongo $lookup levé vnější spojení, jak to, že vylučuje neodpovídající dokumenty?