ゆるふわ技術日誌

エンジニア見習いの悪戦苦闘日記

Mongo with Node.js

今日やった事

Mongo with Node.js

研究のコードを書いていました。

Node.jsからMongoを触るにはmongodbというパッケージを入れればよくて(そのまま)こんな感じで使える。

const MongoClient = require('mongodb').MongoClient;
const _ = require('lodash');

const url = process.env.MONGO_URL || 'mongodb://localhost:27017';
const dbName = process.env.MONGO_DB_NAME || 'fluentd';

// Create a new MongoClient
const client = new MongoClient(url, {useNewUrlParser: true});

client.connect()
  .then(async client => {
    const db = client.db(dbName);
    const query = {
      status: { $regex: /^[123]/ }, // StatusCodeが1xx/2xx/3xxのログを抽出
      request: { $regex: /^GET/ } // GETリクエストを集計対象にする
    };

    const logsGropudByRemoteAddr = {};
    await db.collection('web').find(query).forEach(record => {
      if (logsGropudByRemoteAddr[record.remote]) {
        logsGropudByRemoteAddr[record.remote].push(record);
      } else {
        logsGropudByRemoteAddr[record.remote] = [record];
      }
    });
    client.close();

    return Object.values(logsGropudByRemoteAddr);
  })
  .then(logs => console.log(logs))
  .catch(err => console.log(err));

ちょっとどうでもいい部分が多いが、こんな感じ。

queryという変数には、検索条件が入っている。MongoはNoSQLなのでこんな感じで検索条件を指定していくらしい。

他にも$から始まるオペレータがいろいろとあるので、ドキュメントをみながら探すのがよさそう。(もしくはnot mongoとか、SQLの用語と組み合わせてググるといい感じにヒットする)

明日の予定 / やること

  • SA
  • 研究

雑談

研究に一筋の光が見えたか?

という感じ。とりあえずちゃんとアルゴリズム考えて実装してみないことには始まらなさそうだなと思った。