Node.js - MongoDB 更新:初心者向けの包括ガイド

こんにちは、未来のプログラマーたち!今日は、Node.jsを使ったMongoDBの更新について、楽しい旅に出発します。私がこのトピックを初めて教えたとき、生徒たちの顔には興奮と困惑が混じっていました。でも心配しないでください。このチュートリアルが終わるまでには、プロのようにMongoDBのドキュメントを更新できるようになるでしょう!

Node.js - MongoDB Update

MongoDBの更新とは?

具体的なメソッドに入る前に、MongoDBでの更新とは何かを理解するために少し時間を取ましょう。デジタルなノートブック(それが私たちのデータベース)に記載された情報のページ(私たちのドキュメント)を思い浮かべてください。時々、これらのページに書かれた内容を変更する必要があります。MongoDBでの更新とは、まさにそれです。コレクション内の既存のドキュメントを修正することを許可します。

更新メソッド

MongoDBは、ドキュメントを更新するための二つの主要なメソッドを提供しています:

メソッド 説明
updateOne() フィルタに一致する単一のドキュメントを更新
updateMany() フィルタに一致する複数のドキュメントを更新

これらのメソッドを詳しく見ていきましょう。

updateOne():精密な更新

updateOne()メソッドは、一度に一つのドキュメントを修正する精密な外科医のようなものです。正確にどのドキュメントを変更したいかを知っているときに最適です。

シntax

db.collection.updateOne(filter, update, options)

これを分解すると:

  • filter:更新するどのドキュメントを指定
  • update:適用する修正を定義
  • options:更新操作を制御するためのオプションパラメータ(省略可能)

例1:単一フィールドの更新

例えば、私たちには「大いなる盖然性」のコレクションがあり、その価格を更新したいとします。以下のようにします:

const { MongoClient } = require('mongodb');

async function updateBookPrice() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);

try {
await client.connect();
const database = client.db("bookstore");
const books = database.collection("books");

const filter = { title: "The Great Gatsby" };
const updateDoc = {
$set: {
price: 15.99
},
};

const result = await books.updateOne(filter, updateDoc);
console.log(`Updated ${result.modifiedCount} document`);
} finally {
await client.close();
}
}

updateBookPrice();

この例では、$setオペレータを使って価格を更新しています。$setオペレータは、指定された値でフィールドの値を置き換えます。

例2:新しいフィールドの追加

さて、私たちが「lastUpdated」フィールドをブックドキュメントに追加したいとします:

const filter = { title: "The Great Gatsby" };
const updateDoc = {
$set: {
lastUpdated: new Date()
},
};

const result = await books.updateOne(filter, updateDoc);

これにより、ドキュメントに「lastUpdated」という新しいフィールドが現在の日時で追加されます。

updateMany():一括更新

時々、一度に複数のドキュメントを更新する必要があります。そのときに便利な的就是updateMany()メソッドです。一括で全ての試験を採点する先生のようなものです。

シntax

db.collection.updateMany(filter, update, options)

パラメータはupdateOne()と同じですが、このメソッドはフィルタに一致する全てのドキュメントを更新します。

例3:複数のドキュメントの更新

例えば、価格が$20以上の全ての本に10%の割引を適用したいとします:

async function applyDiscount() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);

try {
await client.connect();
const database = client.db("bookstore");
const books = database.collection("books");

const filter = { price: { $gt: 20 } };
const updateDoc = {
$mul: {
price: 0.9
},
};

const result = await books.updateMany(filter, updateDoc);
console.log(`Updated ${result.modifiedCount} documents`);
} finally {
await client.close();
}
}

applyDiscount();

この例では、$mulオペレータを使って価格を0.9倍にして(10%の割引を適用して)、フィルタの$gtオペレータで価格が20以上のドキュメントを選択しています。

更新オペレータ

MongoDBは、複雑な更新を行うための多くの更新オペレータを提供しています。以下に最も一般的に使用されるものをいくつか示します:

オペレータ 説明
$set フィールドの値を設定
$inc フィールドの値を指定された量で増加
$mul フィールドの値を指定された量で乗算
$rename フィールド名を変更
$unset ドキュメントからフィールドを削除
$min 指定された値が既存のフィールド値よりも小さい場合にフィールドを更新
$max 指定された値が既存のフィールド値よりも大きい場合にフィールドを更新

例4:複数のオペレータの使用

一つの更新操作で複数のオペレータを使用してみましょう:

const filter = { title: "The Great Gatsby" };
const updateDoc = {
$set: { author: "F. Scott Fitzgerald" },
$inc: { copiesSold: 1000 },
$rename: { "publishYear": "yearPublished" }
};

const result = await books.updateOne(filter, updateDoc);

この更新操作では、作者を設定、copiesSoldを1000増加、そして「publishYear」フィールドを「yearPublished」に変更しています。

結論

そして、皆さん!MongoDBの更新についての旅が終わりました。私たちはupdateOne()updateMany()メソッド、そして様々な更新オペレータについて探求しました。練習は完璧を生みますので、これらのメソッドを自分のプロジェクトで実験してみてください。

私はいつも生徒たちに言っていますが、データベース操作を学ぶことは料理を学ぶのと同じです。最初は複雑に見えるかもしれませんが、一度慣れてしまえば、マスタークックが美食を準備するように複雑なクエリを簡単に作成できるようになります!

codingを続け、学び続け、そして何より楽しみましょう!次回まで、お楽しみに!ハッピーユプデート!

Credits: Image by storyset