插入后如何在PyMongo中获取对象id?

时间:2012-01-09 03:58:52

标签: mongodb insert pymongo

我正在简单插入Mongo ...

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

插入便笺文档后,我需要立即获取对象ID。从插入返回的结果有一些关于连接和错误的基本信息,但没有文档和字段信息。

我发现有关使用update()函数和upsert = true的一些信息,我只是不确定这是否是正确的方法,我还没有尝试过。

6 个答案:

答案 0 :(得分:73)

MongoDB的一个很酷的事情是,id是客户端生成的。

这意味着您甚至不必询问服务器ID是什么,因为您首先告诉它要保存什么。使用pymongo,insert的返回值将是object id。看看:

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

答案 1 :(得分:12)

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

答案 2 :(得分:5)

最好使用insert_one()或insert_many()而不是insert()。这两个是用于较新的版本。您可以使用insertd_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)

答案 3 :(得分:2)

<强>更新;删除之前因为它不正确

看起来你也可以使用db.notes.save(...)来执行它,它在执行插入后返回_id。

有关详情,请参阅: http://api.mongodb.org/python/current/api/pymongo/collection.html

答案 4 :(得分:0)

您只需将其分配给某个变量:

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

答案 5 :(得分:0)

较新的PyMongo版本降低insert,而应使用insert_oneinsert_many。这些函数返回一个pymongo.results.InsertOneResultpymongo.results.InsertManyResult对象。

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

有关insert_oneinsert_many的更多信息,请参见this链接,有关pymongo.results.InsertOneResult的更多信息。