使用 MongoDB ObjectId 範圍太小,改用 UUID 來當資料的唯一 ID


  • 註冊用戶

    一般情況, MongoDB 預設的 ObjectId 就相當夠用了,但如果你是要建構大型的 Web Service 或是保留未來的擴充性,可使用 UUID 去代替 ObjectId。不過,因為 MongoDB 本身並不生成 UUID,若是要使用 UUID,就必需先自行產生好 UUID,然後在新增資料時指定生成好的 UUID 給 _id 欄位,讓 MongoDB 改用我們給的 ID 而不使用預設生成的 ObjectId。

    因為要自行產生 UUID,必需先為 NodeJS 安裝模組 node-uuid:

    npm install node-uuid

    然後生成 UUID 並在 insert 時使用:

    var uuid = require('node-uuid');
    var mongodb = require('mongodb');
    var mongodbServer = new mongodb.Server('localhost', 27017, { auto_reconnect: true, poolSize: 10 });
    var db = new mongodb.Db('mydb', mongodbServer);
    /* open db */
    db.open(function() {
        /* Select 'contact' collection */
        db.collection('contact', function(err, collection) {
            /* Generate UUID(16 Bytes) and convert to BinaryData object for mongodb */
            var uuidBinary = new Buffer(uuid.v1({}, []));
            var id = mongodb.BSONPure.Binary(uuidBinary, mongodb.BSONPure.Binary.SUBTYPE_UUID);
            /* Insert a data with uuid */
            collection.insert({
                _id: id,
                name: 'Fred Chien',
                email: 'cfsghost@gmail.com'
            }, function(err, data) {
                if (data) {
                    console.log('Successfully Insert');
                } else {
                    console.log('Failed to Insert');
                }
            });
        });
    });

    在上面的範例程式中,將 UUID 轉成 MongoDB BSON 的 BinaryData 格式,這是為了效能考量,因為用純字串當做 Unique ID,在資料庫搜尋上會比 BinaryData Object 慢很多。


  • 註冊用戶

    以上述的範例來看,應該是使用 npm install node-uuid 才對

    https://www.npmjs.com/package/uuid

    https://www.npmjs.com/package/node-uuid


  • 註冊用戶

    的確是要安裝 node-uuid

    已修正錯誤,謝謝


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待