插入后如何在 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

【讨论】:

很好的答案,虽然我建议使用_idid_ 作为名称。我在 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_oneinsert_many。这些函数返回一个pymongo.results.InsertOneResultpymongo.results.InsertManyResult 对象。

使用这些对象,您可以分别使用.inserted_id.inserted_ids 属性来获取插入的对象ID。

有关insert_oneinsert_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?的主要内容,如果未能解决你的问题,请参考以下文章

自动增量 pymongo

如何在 pymongo 中获取有序字典?

PyMongo:如何获取与任何可能的过滤器匹配的所有对象?

我可以在 LINQ 插入后返回“id”字段吗?

将 Null 项插入集合 Mongodb (Pymongo)

使用 pymongo 从多个更高级别的数组对象聚合嵌套数组对象