web-dev-qa-db-ja.com

mongodbなしで_id文字列のようなmongodbを作成する方法はありますか?

私は、mongodbによって生成された_idsの形式が本当に好きです。ほとんどの場合、クライアント側から日付などのデータをプルできるからです。別のデータベースを使用するつもりですが、ドキュメントにそのタイプの_idが必要です。 mongodbを使用せずにこれらのIDを作成するにはどうすればよいですか?

ありがとう!

22
fancy

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))
35
Ruben Stolk

ObjectIdsを生成するブラウザクライアントがあります。サーバーで使用されているのと同じ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());

ライブラリでは、古き良きスクリプトタグを使用してインポートすることもできますが、これは試していません。

22
dipole_moment

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
5
Grant Carthew

矢印関数(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();
0
fatihturgut

ここに詳細な仕様があります

http://www.mongodb.org/display/DOCS/Object+IDs

自分のID文字列をロールするために使用できるもの

0
deltanovember