出力フィールドをフォーマットする
このステップでは、MongoDB の投影と集約技術を使って出力フィールドをフォーマットして変換する方法を学びます。投影中にフィールドを改名、計算、変更する方法を探ります。
まず、より詳細な情報でユーザー コレクションを更新しましょう。
// 既存のドキュメントを削除
db.users.deleteMany({});
// より複雑なデータを持つドキュメントを挿入
db.users.insertMany([
{
name: "John Doe",
age: 30,
salary: 75000,
department: "Engineering"
},
{
name: "Jane Smith",
age: 28,
salary: 85000,
department: "Data Science"
},
{
name: "Mike Johnson",
age: 35,
salary: 95000,
department: "Management"
}
]);
投影中にフィールドを改名するには $
演算子を使用します。
db.users.find(
{},
{
fullName: "$name",
yearsOld: "$age",
annualSalary: "$salary",
_id: 0
}
);
出力例:
[
{ fullName: 'John Doe', yearsOld: 30, annualSalary: 75000 },
{ fullName: 'Jane Smith', yearsOld: 28, annualSalary: 85000 },
{ fullName: 'Mike Johnson', yearsOld: 35, annualSalary: 95000 }
]
また、$
集約演算子を使って計算も行えます。
db.users.aggregate([
{
$project: {
name: 1,
monthlySalary: { $divide: ["$salary", 12] },
salaryTier: {
$switch: {
branches: [
{ case: { $lt: ["$salary", 80000] }, then: "Junior" },
{ case: { $gte: ["$salary", 80000] }, then: "Senior" }
],
default: "Unknown"
}
},
_id: 0
}
}
]);
出力例:
[
{
name: 'John Doe',
monthlySalary: 6250,
salaryTier: 'Junior'
},
{
name: 'Jane Smith',
monthlySalary: 7083.333333333333,
salaryTier: 'Senior'
},
{
name: 'Mike Johnson',
monthlySalary: 7916.666666666667,
salaryTier: 'Senior'
}
]
出力フィールドをフォーマットする際の要点:
- 投影中にフィールドを改名するには
$
を使用します
- 集約パイプラインを使うと複雑なフィールド変換が可能です
- 計算や条件付きフィールドを作成できます
$project
ステージはフィールドのフォーマットに強力です