web-dev-qa-db-ja.com

挿入後にPyMongoでオブジェクトIDを取得する方法は?

私はMongoに簡単な挿入をしています...

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

ノートドキュメントを挿入したら、すぐにオブジェクトIDを取得する必要があります。挿入から返される結果には、接続とエラーに関する基本的な情報が含まれていますが、ドキュメントとフィールドの情報はありません。

Upsert = trueでupdate()関数を使用することに関する情報を見つけました。それが正しい方法であるかどうかはわかりませんが、まだ試していません。

37
user1125472

MongoDBの素晴らしい点の1つは、IDがクライアント側で生成されることです。

つまり、最初に保存するものを指定したため、サーバーにidを尋ねる必要さえありません。 pymongoを使用すると、挿入の戻り値はオブジェクトIDになります。見てみな:

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

タイラーからの答えは私にはうまくいきません。 _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
16
Kumar Saurabh

Insert()の代わりにinsert_one()またはinsert_many()を使用することをお勧めします。これら2つは、新しいバージョン用です。 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)
3
Mehdi Hasirchi

新しい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の詳細については this リンクを参照してください。

2
Jurgen Strydom

更新;正しくなかったため、以前は削除されました

db.notes.save(...)でも実行できるようです。挿入すると、_idが返されます。

詳細情報を参照してください: http://api.mongodb.org/python/current/api/pymongo/collection.html

2
Eve Freeman

何らかの変数にそれを割り当てる必要があります:

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