轻便摩托车:插入后获取id

时间:2015-03-05 17:02:18

标签: mongodb mongoid moped

当我使用mongo-ruby-driver并插入新文档时,它返回生成的' _id':

db = MongoClient.new('127.0.0.1', '27017').db('ruby-mongo-examples')
id = db['test'].insert({name: 'example'})

# BSON::ObjectId('54f88b01ab8bae12b2000001')

我试图获得' _id'使用Moped进行插入后的文档:

db = Moped::Session.new(['127.0.0.1:27017'])
db.use('ruby-mongo-examples')
id = db['coll'].insert({name: 'example'})

# {"connectionId"=>15, "n"=>0, "syncMillis"=>0, "writtenTo"=>nil, "err"=>nil, "ok"=>1.0}

我如何使用Moped获取id?

更新

我也尝试使用安全模式,但它不起作用:

db = Moped::Session.new(['127.0.0.1:27017'])
db.use('ruby-mongo-examples')

db.with(safe: true) do |safe|
  id = safe['coll'].insert({name: 'example'})

  # {"connectionId"=>5, "n"=>0, "syncMillis"=>0, "writtenTo"=>nil, "err"=>nil, "ok"=>1.0}
end

2 个答案:

答案 0 :(得分:14)

插入/保存后,返回的对象将具有inserted_id的属性BSON::ObjectId

# I'm using insert_one
result = safe['coll'].insert_one({name: 'example'})   
result.methods.sort        # see list of methods/properties
result.inserted_id
result.inserted_id.to_s    # convert to string

答案 1 :(得分:0)

从此issue

  

这会很好,但遗憾的是Mongo没有给我们任何东西   插入时(因为它是火和忘记),以及在安全时   模式它仍然不会返回id,如果它在上面生成它   服务器。所以我们真的没有办法做到这一点   除非它是MongoDB的核心功能。

您最好的选择是在插入文档之前生成id:

document = { _id: Moped::BSON::ObjectId.new, name: "example" } 
id = document[:_id]