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

Mongodb 轻便摩托车:插入后获取id,mongodb,mongoid,moped,Mongodb,Mongoid,Moped,当我使用mongo ruby驱动程序并插入新文档时,它返回生成的“\u id”: db = MongoClient.new('127.0.0.1', '27017').db('ruby-mongo-examples') id = db['test'].insert({name: 'example'}) # BSON::ObjectId('54f88b01ab8bae12b2000001') 在使用Moped进行插入后,我正在尝试获取文档的“\u id”: db = Moped::Sessio

当我使用mongo ruby驱动程序并插入新文档时,它返回生成的“\u id”:

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

# BSON::ObjectId('54f88b01ab8bae12b2000001')
在使用Moped进行插入后,我正在尝试获取文档的“\u id”:

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}
我怎么用摩托车拿到身份证的

更新:

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

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
由此:

这会很好,但不幸的是Mongo没有给我们任何东西 插入时返回(因为它是火和遗忘),以及在安全的情况下返回 模式,如果它在 服务器。所以我们真的没有任何可能的方法来做到这一点 除非它是MongoDB的核心特性

最好在插入文档之前生成id:

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

插入/保存后,返回的对象将有一个属性
inserted\u 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

如果在插入之前执行或生成一个类似于
document={{u-id:Moped::BSON::ObjectId.new,name:“example”}id=document[:\u-id]
I发现此问题:。似乎唯一的方法是使用带有BSON::ObjectId.new的generte id并使用它。谢谢@chridam。我认为@hamster_-ham的答案比我的更合适,你的电话接受它。hamster_-ham的答案更符合你对mongo工作的期望,即插入文档并将id返回结果。@chrismcauley我同意,不过OP的电话改变了接受的答案。说得好,chridam-尊敬!如果你不想等待mongo,这是一个很好的解决方案。为我工作时没有“保险箱['coll']”,只需coll.insert_one(…)