【告知】値の参照時の仕様変更のお知らせ
このたび2024年11月11日に値の参照に関する仕様変更を予定しておりますので詳細について報告いたします。
more
2023.07.12に公開 | 2023.07.12に更新
Querier運営
「Querier(クエリア)」は社内向け管理画面を圧倒的な速さで、かつビジネスのスケールに合わせて柔軟に構築することができるローコードツールです。
管理画面の構築もWeb上で完結
エンジニアのためのローコードツール
今回は、TypeScriptでMongoDBのデータ操作を行う方法について詳しく解説していきます。
この記事では、具体的にはMongoDBのデータ取得や、データの追加、更新、削除などの操作を行う方法を、Mongooseというライブラリを用いて紹介します。
まずはMongooseとTypeScriptのインストールから始めます。
$ npm install mongoose
$ npm install @types/mongoose
続いて、MongoDBのクライアントを生成します。
import mongoose from 'mongoose';
mongoose.connect('mongodb://localhost/test', {
useNewUrlParser: true,
useUnifiedTopology: true
});
詳しくは、Mongoose公式ドキュメントをご参照ください。
MongoDBではスキーマとモデルを使ってデータの形を定義します。
以下に一例を示します。
import mongoose, { Schema, Document } from 'mongoose';
interface IUser extends Document {
name: string;
email: string;
password: string;
}
const UserSchema: Schema = new Schema({
name: { type: String, required: true },
email: { type: String, required: true },
password: { type: String, required: true }
});
export default mongoose.model<IUser>('User', UserSchema);
スキーマとモデルの作成については、こちらの公式ドキュメントをご覧ください。
findOneメソッドを使用すると、指定した条件に一致する最初のドキュメントを取得できます。
const user = await User.findOne({ email: 'test@example.com' });
console.log(user);
詳細はこちらの公式ドキュメントをご覧ください。
findメソッドを使用すると、指定した条件に一致するすべてのドキュメントを取得できます。
const users = await User.find({ name: 'John Doe' });
console.log(users);
詳細はこちらの公式ドキュメントをご覧ください。
MongoDBのページング機能を利用すると、大量のデータから一部を取得することができます。
以下にskipとlimitを使用した一例を示します。
const pageNo = 2;
const size = 10;
const users = await User.find()
.skip(size * (pageNo - 1))
.limit(size);
詳細はこちらの公式ドキュメントをご覧ください。
Mongooseでは新たに作成したモデルのインスタンスをsave
メソッドで保存することができます。
const user = new User({
name: 'John Doe',
email: 'john@example.com',
password: 'password123'
});
await user.save();
詳細はこちらの公式ドキュメントをご覧ください。
複数のドキュメントを一度に追加するにはinsertMany
を使用します。
await User.insertMany([
{ name: 'Alice', email: 'alice@example.com', password: 'password123' },
{ name: 'Bob', email: 'bob@example.com', password: 'password123' }
]);
詳細はこちらの公式ドキュメントをご覧ください。
特定のドキュメントを更新するにはupdate
メソッドを使用します。
await User.update({ name: 'Alice' }, { $set: { email: 'newalice@example.com' } });
詳細はこちらの公式ドキュメントをご覧ください。
複数のドキュメントを一度に更新するにはupdateMany
メソッドを使用します。
await User.updateMany({ name: { $in: ['Alice', 'Bob'] } }, { $set: { password: 'newpassword123' } });
詳細はこちらの公式ドキュメントをご覧ください。
特定のドキュメントを見つけて更新するには、findOneAndUpdate
メソッドを使用します。
await User.findOneAndUpdate({ name: 'Alice' }, { $set: { email: 'newalice@example.com' } });
詳細はこちらの公式ドキュメントをご覧ください。
特定のドキュメントを削除するにはdeleteOne
メソッドを使用します。
await User.deleteOne({ email: 'newalice@example.com' });
詳細はこちらの公式ドキュメントをご覧ください。
複数のドキュメントを一度に削除するにはdeleteMany
メソッドを使用します。
await User.deleteMany({ name: { $in: ['Alice', 'Bob'] } });
詳細はこちらの公式ドキュメントをご覧ください。
MongooseはMongoDBのトランザクションもサポートしています。
const session = await mongoose.startSession();
session.startTransaction();
try {
const user1 = await User.findOneAndUpdate({ name: 'Alice' }, { $inc: { balance: -100 } }, { session });
const user2 = await User.findOneAndUpdate({ name: 'Bob' }, { $inc: { balance: 100 } }, { session });
if (!user1 || !user2) throw new Error('Operation failed');
await session.commitTransaction();
} catch (error) {
await session.abortTransaction();
} finally {
session.endSession();
}
詳細はこちらの公式ドキュメントをご覧ください。
以上が、TypeScriptとMongooseを使ってMongoDBのデータ操作を行う方法についての解説です。
データベースの操作は、アプリケーション開発において非常に重要な部分であり、この記事が皆さんの開発の助けになれば幸いです。
Querier運営
「Querier(クエリア)」は社内向け管理画面を圧倒的な速さで、かつビジネスのスケールに合わせて柔軟に構築することができるローコードツールです。
このたび2024年11月11日に値の参照に関する仕様変更を予定しておりますので詳細について報告いたします。
more
データフローの通知設定機能・監査ログへのパラメータが追加されましたのでご紹介します。
more
データフローのアクションに永続化などに利用できるローカルストレージ機能を追加しました。
more
日本を健康に。多彩なフィットネスブランドを展開中。スタジオ付きの「JOYFIT」、24時間型の「JOYFIT24」、ヨガスタジオ「JOYFIT YOGA」、パーソナルジム「JOYFIT+」、家族向けの「FIT365」など、多彩なブランド展開で全国を席巻しているスポーツ事業。
more
管理画面の構築もWeb上で完結
エンジニアのためのローコードツール