mongodb 如何在PyMongo中获得插入后的对象id?

s8vozzvw  于 2022-12-12  发布在  Go
关注(0)|答案(8)|浏览(172)

我在做一个简单的插入到Mongo...

db.notes.insert({ title: "title", details: "note details"})

插入笔记文档后,我需要立即获得对象ID。插入返回的结果有一些关于连接和错误的基本信息,但没有文档和字段信息。
我发现了一些关于upsert=true的update()函数的信息,我只是不确定这是否是正确的方法,我还没有尝试过。

zqdjd7g9

zqdjd7g91#

MongoDB的一个很酷的地方是id是在客户端生成的。
这意味着你甚至不需要问服务器id是什么,因为你已经告诉了它要保存什么。使用pymongo,插入的返回值将是对象id。

>>> import pymongo
>>> collection = pymongo.Connection()['test']['tyler']
>>> _id = collection.insert({"name": "tyler"})
>>> print _id.inserted_id 
4f0b2f55096f7622f6000000
ig9co6j1

ig9co6j12#

泰勒的答案对我不起作用。使用_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
n1bvdmb6

n1bvdmb63#

最好使用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)
jm2pwxwz

jm2pwxwz4#

较新的PyMongo版本会减少insert的值,应该使用insert_oneinsert_many。这些函数返回pymongo.results.InsertOneResultpymongo.results.InsertManyResult对象。
对于这些对象,可以分别使用.inserted_id.inserted_ids属性来获取插入的对象ID。
有关insert_oneinsert_many的详细信息,请参阅此链接;有关pymongo.results.InsertOneResult的详细信息,请参阅此链接。

svmlkihl

svmlkihl5#

已更新;已删除以前的,因为它不正确

看起来您也可以使用db.notes.save(...)执行此操作,它在执行插入后返回_id。
有关更多信息,请参阅:http://api.mongodb.org/python/current/api/pymongo/collection.html

kulphzqa

kulphzqa6#

some_var = db.notes.insert({ title: "title", details: "note details"})
print(some_var.inserted_id)
8wigbo56

8wigbo567#

只需将其赋值给某个变量:

someVar = db.notes.insert({ title: "title", details: "note details"})
58wvjzkj

58wvjzkj8#

要在Python中执行Insert后获取ID,只需执行以下操作:

doc = db.notes.insert({ title: "title", details: "note details"})
return str(doc.inserted_id) # This is to convert the ObjectID (type of doc.inserted_id into string)

相关问题