我正在简单插入Mongo ...
db.notes.insert({ title: "title", details: "note details"})
插入便笺文档后,我需要立即获取对象ID。从插入返回的结果有一些关于连接和错误的基本信息,但没有文档和字段信息。
我发现有关使用update()函数和upsert = true的一些信息,我只是不确定这是否是正确的方法,我还没有尝试过。
答案 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_one
或insert_many
。这些函数返回一个pymongo.results.InsertOneResult
或pymongo.results.InsertManyResult
对象。
使用这些对象,您可以分别使用.inserted_id
和.inserted_ids
属性来获取插入的对象ID。
有关insert_one
和insert_many
的更多信息,请参见this链接,有关pymongo.results.InsertOneResult
的更多信息。