10

Mongo docs では、次のように述べています。

_id フィールドは任意の型にすることができます。ただし、一意である必要があります。したがって、BSON ObjectId の代わりに _id フィールドで UUID を使用できます (BSON ObjectId はわずかに小さく、世界中で一意である必要はなく、単一の db クラスターで一意であるだけです)。UUID を使用する場合、アプリケーションは UUID 自体を生成する必要があります。理想的には、UUID は効率のために [DOCS:BSON] 型に格納されますが、スペースと速度がユース ケースの問題にならないことがわかっている場合は、16 進文字列として挿入することもできます。

では、すべての Mongo ドキュメントに対して [DOCS:BSON] 形式で防弾の世界的に一意の GUID を作成する方法を教えてもらえますか? クラスター間であっても、GUID が重複しないようにしたいと考えています。Mongo と GUID に関して、ベスト プラクティスの経験やアイデアがある人はいますか? Mongos のネイティブ ID システムを使用する方が簡単ですが、必要に応じて新しい ObjectID を挿入して生成する前に重複をチェックしますか?

4

2 に答える 2

8

一意の ID が必要で、ObjectId を使用したくない場合は、おそらく uuid4 を使用することをお勧めします。

>>> import pymongo
>>> import uuid
>>> c = pymongo.Connection()
>>> uu = uuid.uuid4()
>>> uu
UUID('14a2aad7-fa01-40a4-8a80-04242b946ee4')
>>> c.test.uuidtest.insert({'_id': uu})
UUID('14a2aad7-fa01-40a4-8a80-04242b946ee4')
>>> c.test.uuidtest.find_one()
{u'_id': UUID('14a2aad7-fa01-40a4-8a80-04242b946ee4')}
于 2012-08-16T22:03:27.533 に答える
5
import uuid
uuid.uuid1()

ソース: http://docs.python.org/library/uuid.html

于 2012-08-16T15:42:03.853 に答える