On the MongoMapper group list, Nick was wondering about getting key names from the model. But he noticed it remembered keys that had once been used… He wanted to only be able to see the current state of his MongoMapper class, I suppose… No dice, Nick!
Remember, MongoMapper Don’t Care! MongoMapper also does not forget! You can always see what keys were ever used as demonstrated here:
MongoMapper.database.collection('users').drop class User include MongoMapper::Document key :name, String, :required => true end User.destroy_all text = [] text << "After model with key :name, String" text << User.keys.keys.inspect text << 'User.create(:name => "Fred")' User.create(:name => "Fred") text << User.keys.keys.inspect text << 'User.create(:name => "Fred", :email => "me@me.com")' User.create(:name => "Fred", :email => "me@me.com") text << User.keys.keys.inspect text << 'User.destroy_all' User.destroy_all text << User.keys.keys.inspect text.each {|t| puts t}
You can see how the model keys reflect what is in the model class and in the actual document store (that is, dynamically added via a create):
After model with key :name, String ["name", "_id"] User.create(:name => "Fred") ["name", "_id"] User.create(:name => "Fred", :email => "me@me.com") ["name", "_id", "email"] User.destroy_all ["name", "_id", "email"]
Now let’s extend the model class to add a new city key:
class User include MongoMapper::Document key :name, String, :required => true key :city, String end text = [] text << 'Extended the class, adding city' text << User.keys.keys.inspect text.each {|t| puts t}
As expected: there is the new key:
Extended the class, adding city ["city", "name", "_id", "email"]
Removing Keys
If you accidentally added keys, then you should remove them. For example, I accidentally had an uppercase key in the model for a while (oops). Here is how I eradicated it from the database store:
def self.purge_msid_key uppercase_msid_acts = Account.where(:MSID.exists => true).count if uppercase_msid_acts > 0 Account.unset({}, :MSID) end end
Related MongoMapper Issue: Track Loaded Keys at the Instance Level
Пишите еще!
Да! Спасибо