mongooseでObjectIdを生成するにはどうすればよいですか?


132

ObjectIdMongooseでMongoDBを生成したいのですが。ObjectIdMongooseからコンストラクタにアクセスする方法はありますか?

  • この質問は、ゼロから新しいもの ObjectId生成することについてです。生成されたIDは、まったく新しい一意のIDです。

  • 別の質問はObjectId既存の文字列表現からを作成することについて尋ねます。この場合、IDの文字列表現はすでに存在しており、普遍的に一意である場合とそうでない場合があります。また、IDをに解析していObjectIdます。

回答:


290

あなたは見つけることができるObjectIdのコンストラクタをrequire('mongoose').Types。次に例を示します。

var mongoose = require('mongoose');
var id = mongoose.Types.ObjectId();

idは、新しく生成されたObjectIdです。

このTypesオブジェクトの詳細については、Mongoose#Typesのドキュメントをご覧ください。


4
これが本当にユニークであることをどうやって確認できますか?マングースは以前にどんなチェックをしますか?
R01010010 2016

1
@ R01010010これらがどのように生成されるかをチェックしてください(Google)。チェックはありませんが、確率的です
Dmitry Minkovsky

13
同じマシンで1秒以内に16777216を生成すると、おそらく重複が発生します。:)
joeytwiddle 2016年

修正:同じマシンで1ミリ秒以内に16777216を生成すると、おそらく重複が発生します。😁
回避影

43

mongooseを使用して、次のObjectIdような新しいMongoDBを作成できます。

var mongoose = require('mongoose');
var newId = new mongoose.mongo.ObjectId('56cb91bdc3464f14678934ca');
// or leave the id string blank to generate an id with a new hex identifier
var newId2 = new mongoose.mongo.ObjectId();

14

クライアント側でmongodb IDを生成する必要がありました。

mongodbソースコードを詳しく調べたところ、npm bsonlib を使用してObjectIDを生成していることがわかりました。

mongodb / mongooseパッケージ全体をインストールせずにObjectIDのみを生成する必要がある場合は、ライターbsonライブラリをインポートできます。

const bson = require('bson');
new bson.ObjectId(); // 5cabe64dcf0d4447fa60f5e2

注:bson-objectidさらに軽いという名前のnpmプロジェクトもあります


6

ES6構文を使用

import mongoose from "mongoose";

// Generate a new new ObjectId
const newId2 = new mongoose.Types.ObjectId();
// Convert string to ObjectId
const newId = new mongoose.Types.ObjectId('56cb91bdc3464f14678934ca');
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.