MongoDB: Node.jsからアクセス


前提


ドキュメント


インストール: Node.js用のドライバ

// 専用のディレクトリで
npm init --yes
npm install mongodb

サーバアクセスの流れ

  1. サーバアクセス
  2. データベース指定
  3. コレクション指定
  4. コレクション操作
  5. クライアント閉じる
#!/usr/bin/env node

'use strict'

const MongoClient = require('mongodb').MongoClient
const assert = require('assert')

const port = 27017
// サーバURL
const url = 'mongodb://localhost:' + port
// DB名
const dbName = 'test'
// コレクション名
const cName = 'mybook'

const options = {
  // 非推奨機能をやめる
  useNewUrlParser: true,
  useUnifiedTopology: true
}

// 1. サーバアクセス
MongoClient.connect(url, options, (err, client) => {
  assert.equal(null, err) // エラー確認する場合

  // 2. データベース指定
  const db = client.db(dbName)

  // 3. コレクション指定
  db.collection(cName, (error, collection) => {
    // 4. コレクション操作
    collection.countDocuments((error, result) => {
      console.log('ドキュメント数:', result)
    })
  })

  // 5. クライアント閉じる
  client.close()
})

以降のコード例は、コレクション操作の部分だけ。


挿入

insertOne(): 1件

    let doc = { タイトル: '宇宙人失格', 評価: 93 }
    collection.insertOne(doc, (err, result) => {
      assert.equal(err, null)
      assert.equal(result.insertedCount, 1) // 1件挿入を確認
      console.log("挿入:", doc)
    })

insertMany(): 複数

    let arr = [
      { タイトル: '吾輩は犬', 評価: 87 },
      { タイトル: '坊っちゃま'},
    ]
    collection.insertMany(arr, (err, docs) => {
      assert.equal(err, null)
      assert.equal(arr.length, docs.insertedCount) // 件数一致
      console.log("挿入:", arr)
    })

検索

findOne(): 1件

    let filter = {
      タイトル: '吾輩は犬'
    } 
    collection.findOne(filter, (err, doc) => {
      assert.notEqual(doc, null) // 1つ発見
      console.log("検索:", doc)
    })

find(): 複数

    let filter = { 評価: { $gt: 80 } }
    collection.find(filter).toArray((err, docs) => {
      assert.equal(err, null)
      console.log("検索:", docs)
    })

更新

findOneAndUpdate()

    let filter = { "タイトル" : "宇宙人失格" }
    let update = { $set: { 評価 : 83, 難易度: 'C' } }
    let options = { returnOriginal: false } // 更新後ドキュメントを得る
    collection.findOneAndUpdate(filter, update, options, (err, result) => {
      assert.equal(err, null)
      console.log("更新:", result.value)
    })

削除

findOneAndDelete()

    let filter = { "タイトル" : "坊っちゃま" }
    collection.findOneAndDelete(filter, (err, result) => {
      assert.equal(err, null)
      console.log("削除:", result.value)
    })