■ はじめに
Node.jsからMongoDB Atlasの基本操作ができるようになることが目標です。
※MongoDB Atlasは MongoDB社が提供しているクラウド上のMongoDB環境です。
※MongoDB Atlasを利用するには利用登録が必要ですが、このドキュメントでは解説しません。
■ 環境
MongoDB Atlas version 5.0.8
Node.js v16.15.0
mongodb(ドライバ) 4.6.0
■ 目標
- クラウド上のMongoDBに接続できるようになる
- MongoDBからデータを取得できるようになる
- MongoDBにデータを追加できるようになる
- MongoDBのデータを変更できるようになる
- MongoDBからデータを削除できるようになる
■ 準備
npm install mongodb
■ 接続
const { MongoClient, ServerApiVersion, MongoCursorInUseError } = require('mongodb')
// 接続文字列(MongoDBのサイトで調べることができる)
const uri = 'mongodb+srv://...'
async function main() {
const client = new MongoClient(uri,
{ useNewUrlParser: true, useUnifiedTopology: true, verApi: ServerApiVersion.v1 })
try {
await client.connect()
// ToDo: 各種DB操作
}
catch (err) {
console.log(err.message)
}
finally {
client.close()
}
}
■ データの取得
const query = {} // 検索条件
const sort = { contents: 1 } // ソート 1:昇順、-1:降順
const collection = client.db("test").collection("items")
const cursor = collection.find(query).sort(sort)
const documents = await cursor.toArray()
documents.forEach(doc => console.log(doc))
await cursor.close()
検索条件
// 全件取得
const query = {}
// titleが「今日の天気」と完全一致するアイテムを取得
const query = { title: '今日の天気' }
// テキストの部分一致は正規表現を使う
const query = { title: /今日/ }
// 数値の場合はこう
const query = { id: 123 }
ソートの優先順位
// 複数のソートキーを指定すると、指定順に優先度が決まる
// 1:昇順、-1:降順
const sort = { contents: 1, temp: 1 }
■ データの追加
const item = {
title: '今日の天気',
contents: '今日の天気は晴れのち曇り'
}
const collection = client.db("test").collection("items")
const result = await collection.insertOne(item)
console.log(`追加したドキュメントのIDは${result.insertedId}です`)
■ データの変更
1件更新
const filter = {title: '今日の天気'}
const update = {
$set: {
contents: '今日は晴天'
}
}
const collection = client.db("test").collection("items")
// 複数のドキュメントが見つかった場合は最初のドキュメントが更新される
const result = await collection.updateOne(filter, update)
console.log(`${result.modifiedCount}件のドキュメントを更新しました`);
複数件更新
const filter = {title: '今日の天気'}
const update = {
$set: {
contents: '今日は晴天'
}
}
const collection = client.db("test").collection("items")
const result = await collection.updateMany(filter, update)
console.log(`${result.modifiedCount}件のドキュメントを更新しました`);
■ データの削除
1件削除
const query = {title: '今日の天気'} // 検索条件
const collection = client.db("test").collection("items")
// 複数のドキュメントが見つかった場合は最初のドキュメントが削除される
const result = await collection.deleteOne(query)
console.log(`${result.deletedCount}件、ドキュメントを削除しました`)
複数件削除
const query = {title: '今日の天気'} // 検索条件
const collection = client.db("test").collection("items")
const result = await collection.deleteMany(query)
console.log(`${result.deletedCount}件、ドキュメントを削除しました`)