Node.js、MongoDB、Express を使用して Mongoose 経由で MongoDB 配列に項目をプッシュする方法
Node.js、MongoDB、Express を使用して Mongoose 経由で MongoDB 配列に項目をプッシュする方法
準備
始める前に、以下のものが必要です。
- Node.js がインストールされていること
- MongoDB がインストールされ、実行されていること
コード
以下のコードは、Mongoose モデルの配列に項目をプッシュする方法を示しています。
// モジュールのインポート
const mongoose = require('mongoose');
const express = require('express');
// アプリケーションの作成
const app = express();
// MongoDB への接続
mongoose.connect('mongodb://localhost:27017/mydb', {
useNewUrlParser: true,
useUnifiedTopology: true,
});
// スキーマの作成
const userSchema = new mongoose.Schema({
name: String,
age: Number,
hobbies: [String],
});
// モデルの作成
const User = mongoose.model('User', userSchema);
// エンドポイントの作成
app.post('/users', async (req, res) => {
// リクエストのボディからデータを取得
const { name, age, hobbies } = req.body;
// 新しいユーザーを作成
const user = new User({
name,
age,
hobbies,
});
// 配列に項目をプッシュ
user.hobbies.push('新しい趣味');
// ユーザーを保存
await user.save();
// レスポンスを返す
res.send('ユーザーが作成されました');
});
// アプリケーションの起動
app.listen(3000, () => {
console.log('サーバーが起動しました');
});
このコードでは、以下のことが行われています。
mongoose
、express
モジュールをインポートします。- Express アプリケーションを作成します。
- MongoDB への接続を確立します。
- ユーザーのスキーマとモデルを作成します。
/users
エンドポイントを作成します。- エンドポイントでは、リクエストのボディからデータを取得し、新しいユーザーを作成します。
- 新しいユーザーの
hobbies
配列に項目をプッシュします。 - ユーザーをデータベースに保存します。
- レスポンスを返します。
- アプリケーションをポート 3000 で起動します。
実行
コードを保存して、以下のコマンドを実行してアプリケーションを起動します。
node index.js
アプリケーションが起動したら、Postman などのツールを使用して /users
エンドポイントに POST リクエストを送信できます。リクエストのボディには、以下の JSON を含める必要があります。
{
"name": "John Doe",
"age": 30,
"hobbies": ["読書", "映画鑑賞"]
}
リクエストが成功すると、以下のレスポンスが返されます。
ユーザーが作成されました
データベースを確認すると、新しいユーザーが hobbies
配列に新しい項目を含む状態で作成されていることがわかります。
このチュートリアルでは、Node.js、MongoDB、Express、Mongoose を使用して Mongoose モデルの配列に項目をプッシュする方法を説明しました。
このチュートリアルで学んだことを使用して、さまざまなアプリケーションで MongoDB 配列を操作することができます。
補足
- Node.js、MongoDB、Express について詳しくは、それぞれ公式ドキュメントを参照してください。
// モジュールのインポート
const mongoose = require('mongoose');
const express = require('express');
// アプリケーションの作成
const app = express();
// MongoDB への接続
mongoose.connect('mongodb://localhost:27017/mydb', {
useNewUrlParser: true,
useUnifiedTopology: true,
});
// スキーマの作成
const userSchema = new mongoose.Schema({
name: String,
age: Number,
hobbies: [String],
});
// モデルの作成
const User = mongoose.model('User', userSchema);
// エンドポイントの作成
app.post('/users', async (req, res) => {
// リクエストのボディからデータを取得
const { name, age, hobbies } = req.body;
// 新しいユーザーを作成
const user = new User({
name,
age,
hobbies,
});
// 配列に項目をプッシュ
user.hobbies.push('新しい趣味');
// ユーザーを保存
await user.save();
// レスポンスを返す
res.send('ユーザーが作成されました');
});
// アプリケーションの起動
app.listen(3000, () => {
console.log('サーバーが起動しました');
});
コードの説明
実行方法
- コードをファイルに保存します。
node index.js
- Postman などのツールを使用して、以下の JSON を含む POST リクエストを
/users
エンドポイントに送信します。
{
"name": "John Doe",
"age": 30,
"hobbies": ["読書", "映画鑑賞"]
}
結果
ユーザーが作成されました
変更
このサンプルコードは基本的な例です。必要に応じてコードを変更できます。
- 他のフィールドを追加したり、フィールドの名前を変更したりできます。
- 複数の項目を同時に配列に追加できます。
- 配列の特定のインデックスに項目を挿入できます。
- 配列から項目を削除できます。
Mongoose モデルの配列に項目をプッシュする他の方法
$push オペレータを使用する
Mongoose は、$push
オペレータを使用して、ドキュメントの配列に項目をプッシュするための便利な方法を提供します。
const user = await User.findById('1234567890');
// 配列の末尾に項目を追加
user.hobbies.$push('新しい趣味');
// 配列の特定のインデックスに項目を挿入
user.hobbies.$push({ $each: ['新しい趣味', '別の趣味'], $position: 1 });
// 保存
await user.save();
update()
メソッドを使用して、配列に項目を追加することもできます。
await User.findByIdAndUpdate('1234567890', {
$push: {
hobbies: '新しい趣味',
},
});
await User.findOneAndUpdate({ _id: '1234567890' }, {
$push: {
hobbies: '新しい趣味',
},
});
ネイティブな MongoDB クエリを使用する
Mongoose の代わりにネイティブな MongoDB クエリを使用して、配列に項目を追加することもできます。
const db = mongoose.connection.db;
await db.collection('users').updateOne({ _id: '1234567890' }, {
$push: {
hobbies: '新しい趣味',
},
});
使用する方法は、要件と好みによって異なります。
- シンプルな場合は、
$push
オペレータを使用するのが最良の方法です。 - より複雑な操作を行う場合は、
update()
、findOneAndUpdate()
、またはネイティブな MongoDB クエリを使用する必要があります。
node.js mongodb express