私は、mongodbによって生成された_idsの形式が本当に好きです。ほとんどの場合、クライアント側から日付などのデータをプルできるからです。別のデータベースを使用するつもりですが、ドキュメントにそのタイプの_idが必要です。 mongodbを使用せずにこれらのIDを作成するにはどうすればよいですか?
ありがとう!
JavaScriptの非常に簡単な疑似ObjectIdジェネレーター:
const ObjectId = (m = Math, d = Date, h = 16, s = s => m.floor(s).toString(h)) =>
s(d.now() / 1000) + ' '.repeat(h).replace(/./g, () => s(m.random() * h))
ObjectId
sを生成するブラウザクライアントがあります。サーバーで使用されているのと同じObjectId
アルゴリズムをクライアントで使用するようにしたかったのです。 MongoDBには js-bson があり、これを使用して実行できます。
ノードでJavaScriptを使用している場合。
npm install --save bson
requireステートメントの使用
var ObjectID = require('bson').ObjectID;
var id = new ObjectID();
console.log(id.toString());
ES6インポートステートメントの使用
import { ObjectID } from 'bson';
const id = new ObjectID();
console.log(id.toString());
ライブラリでは、古き良きスクリプトタグを使用してインポートすることもできますが、これは試していません。
Rubin StolkとChrisVの答えをより読みやすい構文(KISS)に拡張します。
function objectId () {
return hex(Date.now() / 1000) +
' '.repeat(16).replace(/./g, () => hex(Math.random() * 16))
}
function hex (value) {
return Math.floor(value).toString(16)
}
export default objectId
矢印関数(es6)を使用していない場合、以下のコードは、通常の関数コードに対するルーベンの回答と同じです。
function ObjectId () {
var m = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Math;
var d = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Date;
var h = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 16;
var s = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function (s) {
return m.floor(s).toString(h);
};
return s(d.now() / 1000) + ' '.repeat(h).replace(/./g, function () {
return s(m.random() * h);
});
}
const ObjectId = ObjectId();