在Mongomapper中定义不同的主键

时间:2010-12-03 03:45:04

标签: ruby-on-rails mongodb mongomapper

我在MongoMapper中定义了一个主键。

class B
  key :_id, string
  key :externalId, string
end

问题在于我在B中添加了一条新记录,看来我需要明确指定_id,当它已经在外部id中定义时

B.new(:_id=>"123", :external_id=>"123 )

这没有多大意义。应该有办法将externalId指定为主键,不是吗?

2 个答案:

答案 0 :(得分:1)

如果你的问题是BSON :: ObjectId,我创建了一个可以帮助你的插件,这个插件为MongoMapper文档增加了自动增加的id

https://github.com/phstc/mongomapper_id2

movie = Movie.create(:title => 'The Simpsons Movie')
movie.id # BSON::ObjectId('4d1d150d30f2246bc6000001')
# Here is the mongomapper_id2
movie.id2 # 1

movie2 = Movie.create(:title => 'Pirates of Silicon Valley')
movie2.id2 # 2

答案 1 :(得分:0)

我不会尝试使用mongomapper定义主键 - 它会自动为您创建_id。我不建议尝试更改此行为。

class B
  include MongoMapper::Document
  key :your_alternate_id, String, :index=>true
end

B.new.id
#4cf86bf1de2f8970ea000179

B.find("4cf86bf1de2f8970ea000179")

我不相信你可以创建自己的PK,复合或其他。