MongoDB で 検索結果のフィールド名 を 変更する 方法

0 件のコメント

今回は「MongoDB で 検索結果のフィールド名 を 変更する 方法」についてまとめます。 SQL で言うところの AS のような実装を MongoDB で実現する方法です。

前提データ

以下のデータを mongo コマンドで投入してある状態で name フィールド を displayName フィールドに変換して取得する方法を見ていきます。

> db.fruits.insertMany([
  { code: "0101", name: "apple", price: 120 },
  { code: "0201", name: "banana", price: 180 },
  { code: "0301", name: "orange", price: 130 },
  { code: "0302", name: "grapefruit", price: 150 },
  { code: "0401", name: "persimmon", price: 100 },
  { code: "0102", name: "pear", price: 130 },
]);

フィールド名を変更する方法

基本的に aggregate()$project ステージ で書き換えることになります。

以下のサンプルコードでは namedisplayName に書き換えて取得しています。 単純に displayName を出力指定して、値を name からとってくるように指定することで書き換えと同じことを実現しています。

コード (index.js)

var MongoClient = require("mongodb").MongoClient;

var URL = "mongodb://localhost:27017/test";

MongoClient.connect(URL, (err, client) => {
  var db = client.db("test");
  db.collection("fruits").aggregate([
    { $project: { _id: 0, displayName: "$name", price: 1 } }
  ]).toArray()
    .then((docs) => {
      console.log(docs);
    })
    .catch((err) => {
      console.log(err);
    })
    .then(() => {
      client.close();
    });
});

実行 & 結果

> node .\index.js
[ { price: 120, displayName: 'apple' },
  { price: 180, displayName: 'banana' },
  { price: 130, displayName: 'orange' },
  { price: 150, displayName: 'grapefruit' },
  { price: 100, displayName: 'persimmon' },
  { price: 130, displayName: 'pear' } ]

今回は「MongoDB で 検索結果のフィールド名 を 変更する 方法」についてまとめました。 ポイントは以下の通りです。

  • aggregate() の $project ステージで書き換え

参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!

最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!