Node.js、MongoDB、Mongooseでコレクション名を自由に変更する方法
Mongooseでコレクション名を強制的に指定する方法
Mongooseは、MongoDBとのやり取りを簡素化するためのNode.jsライブラリです。デフォルトでは、Mongooseはモデル名を複数形にしてコレクション名として使用します。しかし、場合によっては、コレクション名を独自に指定したい場合があります。
方法
コレクション名を強制的に指定するには、Schema
オブジェクトのcollection
オプションを使用します。
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: String,
email: String,
}, {
collection: 'users' // コレクション名を「users」に指定
});
const User = mongoose.model('User', userSchema);
上記コードでは、users
という名前のコレクションを作成します。
- コレクション名を強制的に指定すると、Mongooseは自動的にコレクションを作成しません。コレクションが存在しない場合は、手動で作成する必要があります。
- コレクション名がすでに存在する場合は、エラーが発生します。
collection
オプションは、Schema
オブジェクトのコンストラクタまたはset()
メソッドで設定できます。
例
以下の例では、Post
モデルとComment
モデルのコレクション名をそれぞれposts
とcomments
に指定します。
const mongoose = require('mongoose');
const postSchema = new mongoose.Schema({
title: String,
content: String,
}, {
collection: 'posts'
});
const commentSchema = new mongoose.Schema({
author: String,
content: String,
}, {
collection: 'comments'
});
const Post = mongoose.model('Post', postSchema);
const Comment = mongoose.model('Comment', commentSchema);
const mongoose = require('mongoose');
// MongoDBへの接続
mongoose.connect('mongodb://localhost:27017/test');
// Userモデルのスキーマ
const userSchema = new mongoose.Schema({
name: String,
email: String,
}, {
collection: 'users' // コレクション名を「users」に指定
});
// Postモデルのスキーマ
const postSchema = new mongoose.Schema({
title: String,
content: String,
}, {
collection: 'posts' // コレクション名を「posts」に指定
});
// Userモデルの作成
const User = mongoose.model('User', userSchema);
// Postモデルの作成
const Post = mongoose.model('Post', postSchema);
// データの保存
const user = new User({
name: 'Taro Yamada',
email: '[email protected]',
});
const post = new Post({
title: '初めての投稿',
content: 'Mongooseでコレクション名を変更する方法を紹介しました。',
});
user.save();
post.save();
// データの取得
User.find({}, (err, users) => {
if (err) {
console.error(err);
return;
}
console.log(users);
});
Post.find({}, (err, posts) => {
if (err) {
console.error(err);
return;
}
console.log(posts);
});
説明
mongoose
モジュールをインポートし、MongoDBへの接続を行います。User
モデルとPost
モデルのスキーマを定義します。collection
オプションを使用して、それぞれのコレクション名をusers
とposts
に指定します。User
オブジェクトとPost
オブジェクトを作成し、データを保存します。User
コレクションとPost
コレクションからデータを取得し、コンソールに出力します。
このコードを実行すると、以下の結果が表示されます。
[{ "_id": "6314a21f07674a1842000001", "name": "Taro Yamada", "email": "[email protected]" }]
[{ "_id": "6314a22307674a1842000002", "title": "初めての投稿", "content": "Mongooseでコレクション名を変更する方法を紹介しました。" }]
上記の通り、User
モデルのデータはusers
コレクションに、Post
モデルのデータはposts
コレクションに保存されています。
デフォルトでは、Mongooseはモデル名を複数形にしてコレクション名として使用します。しかし、モデル名を変更することで、コレクション名を任意の名前にすることができます。
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: String,
email: String,
});
// モデル名を「Users」に変更
const User = mongoose.model('Users', userSchema);
上記コードでは、User
モデルのコレクション名はUsers
になります。
mongoose.connect()メソッドのオプションを使用する
mongoose.connect()
メソッドのuseMongoClient
オプションを使用すると、MongoDBドライバーのオプションを指定することができます。このオプションを使用して、コレクション名を強制的に指定することができます。
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test', {
useMongoClient: true,
useNewUrlParser: true,
useUnifiedTopology: true,
dbName: 'myDatabase', // データベース名
collection: { // コレクション名
name: 'users', // コレクション名を「users」に指定
createIndexes: true // インデックスを作成
}
});
// Userモデルのスキーマ
const userSchema = new mongoose.Schema({
name: String,
email: String,
});
// Userモデルの作成
const User = mongoose.model('User', userSchema);
mongoose.connectionオブジェクトを使用する
mongoose.connection
オブジェクトを使用して、コレクションを作成することもできます。
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test');
// Userモデルのスキーマ
const userSchema = new mongoose.Schema({
name: String,
email: String,
});
// コレクションの作成
const User = mongoose.connection.model('users', userSchema);
サードパーティ製ライブラリを使用する
mongoose-collection
などのサードパーティ製ライブラリを使用して、コレクション名を強制的に指定することもできます。
node.js mongodb mongoose