我使用Rails与grape和Mongo,我想使用Rails缓存来优化性能,这是我的代码:
Rails.cache.fetch(cache_key, expires_in: 1.hour) do
render_template('chatrooms/info', {chatroom: chatroom, user:current_user, group: chatroom.group})
end
缓存有效,但返回数据已更改。
之前添加缓存,返回数据为:
chatroom: {
name: "磁场",
id: "573c025cc5ffa353c7000000",
owner_id: "56a8b4c9feec620985000000",
avatar: "http://o2zuoh5os.qnssl.com/icon_magnet.png"
}
否则,添加缓存后,返回数据为:
chatroom: {
name: "磁场",
_id: "573c025cc5ffa353c7000000",
owner_id: "56a8b4c9feec620985000000",
avatar: "http://o2zuoh5os.qnssl.com/icon_magnet.png"
}
' id'字段已更改为' _id'
我不知道发生了什么,如何解决这个问题?
答案 0 :(得分:2)
@wind所以基本上mongoDB为每个文档创建_id
字段。在mongoid中,他们特别为_id属性& setter / getter方法为id
这是mongoid-6.0.2/lib/mongoid/fields.rb
文件
self.aliased_fields = { "id" => "_id" }
self.fields = {}
self.localized_fields = {}
self.pre_processed_defaults = []
self.post_processed_defaults = []
field(
:_id,
default: ->{ BSON::ObjectId.new },
pre_processed: true,
type: BSON::ObjectId
)
alias :id :_id
alias :id= :_id=
end
所以,id和amp; _id在这里是相同的,它只是哪个代码更喜欢哪一个。