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

Пишите еще!
Да! Спасибо