使用 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
已修正錯誤,謝謝