mongoose.Schema の type: ObjectId について解説する機会があったので、その内容をご紹介します。
Q) mongoose.Schema の赤線の type プロパティの値が理解できてません… 他のオブジェクトは String や Number が値になっているのに、user の type プロパティにはユニークID?が入ってるのがちょっとよくわからないです。
A) ざっくり先に回答しておくと ObjectId は MongoDB document の id でして、この場合だと ProfileScheme の関連先 ref の user._id (ObjectId) を保存する field という定義になります。
以下、順序立てて説明していきます。
ProfileScheme.user に保存する ObjectId は user document の _id で、主キーと呼ばれるものです。_id には ObjectId が保存されます。
ObjectId の生成規則については、以下の記事をご覧ください。
mongodbのObjectIdの生成規則 - としたにあんの左脳
「主キーって何?」という点はこちらをご一読ください。
主キー (primary key)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
あなたが挿入したデータに _id フィールドが追加されていることに注目して下さい。全てのドキュメントはユニークな _id フィールドを持たなくてはいけません。これは ObjectID 型の値を自分で生成するか MongoDB に生成させる事になります。ほとんどの 場合 MongoDB に生成させたいと思うでしょう。引用元: MongoDBの薄い本
Mongoose ref は DB のリレーションを定義するものでして、以下の記事がわかりやすいと思います。
RDB脳でもできた、mongooseを使ってmongodbでリレーションとjoinっぽいこと | I am mitsuruog
ref は MongoDB collection 間のリレーションを表現する以外に、find 時にリレーション先のドキュメントも一緒に取得できる という点がメリットだと思ってます。
以下の記事に、サンプルコードと実行結果が載ってるので、あわせて確認してもらうとイメージしやすいと思います。
以上、MongoDB _id, ObjectId と Mongoose ref についてざっくり解説した、現場からお送りしました。