插入后如何在 PyMongo 中获取对象 ID?
Posted
技术标签:
【中文标题】插入后如何在 PyMongo 中获取对象 ID?【英文标题】:How to get the object id in PyMongo after an insert? 【发布时间】:2012-02-05 17:05:48 【问题描述】:我正在对 Mongo 进行简单的插入...
db.notes.insert( title: "title", details: "note details")
note文档插入后,需要立即获取object id。从插入返回的结果包含一些关于连接和错误的基本信息,但没有文档和字段信息。
我发现了一些关于使用 upsert=true 的 update() 函数的信息,我只是不确定这是否是正确的方法,我还没有尝试过。
【问题讨论】:
【参考方案1】:已更新;以前因为不正确而被删除
看起来您也可以使用db.notes.save(...)
来执行此操作,它在执行插入后返回_id。
查看更多信息: http://api.mongodb.org/python/current/api/pymongo/collection.html
【讨论】:
抱歉,被 pymongo 弄糊涂了——更新的答案应该可以工作。 请注意,save(D) 实际上是用于 insert(D) 或 update(D._id, D) 的驱动程序端便捷方法,具体取决于 D 是否具有 _id 字段(如果没有,如果有,请更新)【参考方案2】:关于 MongoDB 的一个很酷的事情是 id 是在客户端生成的。
这意味着您甚至不必询问服务器 id 是什么,因为您一开始就告诉它要保存什么。使用 pymongo,插入的返回值将是对象 id。看看吧:
>>> import pymongo
>>> collection = pymongo.Connection()['test']['tyler']
>>> _id = collection.insert("name": "tyler")
>>> print _id.inserted_id
4f0b2f55096f7622f6000000
【讨论】:
很好的答案,虽然我建议使用_id
或id_
作为名称。我在 python 中很少使用id
,但不使用内置函数名可能是一个好习惯。
在现代版本中,我们应该使用 .inserted_id 属性。 api.mongodb.com/python/current/api/pymongo/…api.mongodb.com/python/current/api/pymongo/…【参考方案3】:
您只需将其分配给某个变量:
someVar = db.notes.insert( title: "title", details: "note details")
【讨论】:
【参考方案4】:泰勒的回答对我不起作用。 使用 _id.inserted_id 有效
>>> import pymongo
>>> collection = pymongo.Connection()['test']['tyler']
>>> _id = collection.insert("name": "tyler")
>>> print(_id)
<pymongo.results.InsertOneResult object at 0x0A7EABCD>
>>> print(_id.inserted_id)
5acf02400000000968ba447f
【讨论】:
也为我工作。 +1【参考方案5】:较新的 PyMongo 版本会贬低 insert
,而应使用 insert_one
或 insert_many
。这些函数返回一个pymongo.results.InsertOneResult
或pymongo.results.InsertManyResult
对象。
使用这些对象,您可以分别使用.inserted_id
和.inserted_ids
属性来获取插入的对象ID。
有关insert_one
和insert_many
和this 的更多信息,请参阅this 链接以了解有关pymongo.results.InsertOneResult
的更多信息。
【讨论】:
【参考方案6】:最好使用 insert_one() 或 insert_many() 而不是 insert()。这两个适用于较新的版本。您可以使用inserted_id 来获取id。
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
myDB = myclient["myDB"]
userTable = myDB["Users"]
userDict="name": "tyler"
_id = userTable.insert_one(userDict).inserted_id
print(_id)
或者
result = userTable.insert_one(userDict)
print(result.inserted_id)
print(result.acknowledged)
如果你需要使用insert(),你应该像下面这样写
_id = userTable.insert(userDict)
print(_id)
【讨论】:
【参考方案7】:some_var = db.notes.insert( title: "title", details: "note details")
print(some_var.inserted_id)
【讨论】:
以上是关于插入后如何在 PyMongo 中获取对象 ID?的主要内容,如果未能解决你的问题,请参考以下文章