sql >> データベース >  >> NoSQL >> MongoDB

PyMongoがuuid.uuid1()をBSON ::Binaryとしてエンコードするのはなぜですか?

    Python uuidのデフォルトのシリアル化 UUIDを使用します BSON仕様 でのバイナリ表現 これにより、範囲クエリの一貫した並べ替えが保証され、データ/インデックスに使用されるストレージも少なくなります。

    たとえば、これらの3つの文字列は16進数で同等です:

    5d78ad35ea5f11e1a183705681b29c47
    5D78AD35EA5F11E1A183705681B29C47
    5d78ad35ea5f11e1A183705681B29C47
    

    ..ただし、文字列としての並べ替え順序は異なります:

    > db.uuidsort.find().sort({_id:1})
    { "_id" : "5D78AD35EA5F11E1A183705681B29C47" }
    { "_id" : "5d78ad35ea5f11e1A183705681B29C47" }
    { "_id" : "5d78ad35ea5f11e1a183705681b29c47" }
    

    bsonサイズの比較:

    > db.uuidtest.find()
    { "_id" : BinData(3,"XXitNepfEeGhg3BWgbKcRw==") }
    { "_id" : "5d78ad35ea5f11e1a183705681b29c47" }
    
    > Object.bsonsize(db.uuidtest.findOne({_id: BinData(3,"XXitNepfEeGhg3BWgbKcRw==")}))
    31
    
    > Object.bsonsize(db.uuidtest.findOne({_id: "5d78ad35ea5f11e1a183705681b29c47"}))
    47
    

    文字列として挿入する場合は、UUID.hexを使用できます。 同等の32文字の文字列を取得するには:

    >>> db.uuidtest.insert({'_id': uuid.hex})
    '5d78ad35ea5f11e1a183705681b29c47'
    

    Pythonから文字列でUUIDを検索する場合は、uuidを使用できます。 UUID メソッド:

    >>> db.uuidtest.find_one({'_id':uuid.UUID('5d78ad35ea5f11e1a183705681b29c47')})
    {u'_id': UUID('5d78ad35-ea5f-11e1-a183-705681b29c47')}
    

    mongoから文字列でUUIDを検索する場合 シェルには、UUID()があります ヘルパー:

    > db.uuidtest.find({_id:UUID('5d78ad35ea5f11e1a183705681b29c47')})
    { "_id" : BinData(3,"XXitNepfEeGhg3BWgbKcRw==") }
    

    注:bson.binaryのAPIドキュメント




    1. Google App EngineでMongoDBを試した人はいますか?

    2. mongodbシリアライザーがすでに登録されているかどうかを検出するにはどうすればよいですか?

    3. MongoMapReduceの初回

    4. Mongooseを使用してインデックスを削除するための推奨される方法は何ですか?