Ruby on rails 3 Mongomapper:Dos"_id";字段与“冲突”;id";?

Ruby on rails 3 Mongomapper:Dos"_id";字段与“冲突”;id";?,ruby-on-rails-3,mongodb,mongomapper,Ruby On Rails 3,Mongodb,Mongomapper,我有一个包含_id和id字段的集合。当我在mongo客户端中按id字段搜索时,一切正常。当我搜索mongomapper模型时,比如:Product.find_by_id(6)或Product.where(:id=>6),它返回空的Plughy对象,我可以看到它查找的是一个_id字段而不是id 据我所知,mongomapper总是使用_id,不管您是否特别想通过id查找某些内容 有什么解决办法吗?或者我做错了?我相信MongoMapper会平等对待id和\u idid只是\u id更友好的表示形式

我有一个包含_id和id字段的集合。当我在mongo客户端中按id字段搜索时,一切正常。当我搜索mongomapper模型时,比如:Product.find_by_id(6)或Product.where(:id=>6),它返回空的Plughy对象,我可以看到它查找的是一个_id字段而不是id

据我所知,mongomapper总是使用_id,不管您是否特别想通过id查找某些内容


有什么解决办法吗?或者我做错了?

我相信MongoMapper会平等对待
id
\u id
id
只是
\u id
更友好的表示形式

在您的特定情况下,是否有任何理由需要同时具有
id
字段?我建议改变这一点,特别是如果有另一个更具描述性的名字适合的话。如果您实际使用
id
字段作为唯一标识符(听起来您可能是这样),最好的方法可能是将其存储在
\u id
字段中。如您所知,这是所有MongoDB文档所必需的,可以由您(您的应用程序)指定,也可以稍后由您的驱动程序在应用程序代码范围之外添加


希望能有所帮助。

可能是这个问题造成的(https://github.com/jnunemaker/mongomapper/issues/195)如果您有一个实例的密钥为“id”。Mongo会记住每个实例中的每个密钥,除非您明确清除该密钥。

Hi,您指的是哪个版本?我们使用的是0.9.2,出于某种原因,它似乎对待“id”与“id”有所不同。是否有需要启用的设置?例如,“Game.id”返回nil,而“Game.\u id”(在下一行)按预期返回mongo id。我现在记不起来了-在写此答案时,它可能是当前版本或最新版本。可能是0.8.x。不过我最近没有测试过,所以完全有可能是行为改变了。我仍然坚持我的信念,但同时拥有“id”和“U id”会带来一些痛苦,如果可能/适当,我会建议另一种设计。