我们使用的是mongodb 2.0.0,mongo gem 1.4.1,mongo_mapper 0.9.2,rails 3.0.6。
我们喜欢MongoMapper,但我们需要帮助解决一个令人讨厌的问题:我们从一些测试中得到了一个密钥,但调用obj.unset却无法做任何事情。
具体来说,我们试图删除一个“id”键(不是“_id”),因为它导致MM将obj.id视为与我们不想要的obj._id不同。
清理完数据库之后,我们从一个不执行任何操作的控制器运行这些命令:(我们也尝试从rails控制台运行相同的代码,但它也失败了。)
logger.info "#{Game.keys.keys.inspect}"
Game.unset({}, :id)
logger.info "#{Game.keys.keys.inspect}"
Game.unset(:id)
logger.info "#{Game.keys.keys.inspect}"
输出:
["jackpot", "players", "created_at", "puzzles", "ended_at", "player_index", "updated_at", "log", "_id", "id", "join_code", "puzzle_index"]
["jackpot", "players", "created_at", "puzzles", "ended_at", "player_index", "updated_at", "log", "_id", "id", "join_code", "puzzle_index"]
["jackpot", "players", "created_at", "puzzles", "ended_at", "player_index", "updated_at", "log", "_id", "id", "join_code", "puzzle_index"]
我们的游戏模型中定义的当前键:
key :players, Array, :default => []
key :player_index, Integer, :default => 0
key :puzzles, Array, :default => []
key :puzzle_index, Integer, :default => 0
key :join_code, String, :default => nil
key :jackpot, Integer, :default => 0
key :log, Array, :default => []
key :created_at, Time
key :updated_at, Time
key :ended_at, Time, :default => nil
帮助?
谢谢!
答案 0 :(得分:0)
我们很难发布答案,因为这巩固了我们的状态“白痴,白痴,傻瓜,新手,Jay Leno粉丝”,但万一其他人碰到同样的问题:我们的模型目录在开发中是干净的环境,生产环境中的模型目录包含旧的测试文件...其中包含一个带有“id”键的旧模型。
显然,删除旧文件和旧模型解决了所有问题,尽管我们的自负和头部(从过度撞击墙壁)留下了惊人的瘀伤。