MongoDB权威指南 【笔记】【聚合篇】【$project】

279 阅读1分钟

1.$project

0.基本用法

功能:过滤返回字段

//添加字段,删除字段
{
    "$project" : {
        "userId" : "$_id",
        "$_id" : 0
    }
}
1.数学表达式

功能:新增字段,返回基本运算(加,减,乘,除,取余)结果;

//可多个值进行相加
{
    "$project" : {
        "total" : {
            "$add" : ["$fieldname1", "$fieldname2", "..."]
        }
    }
}
//第一个值 减去 第二个值
{
    "$project" : {
        "total" : {
            "$subtract" : ["$fieldname1", "$fieldname2"]
        }
    }
}
//可多个值相乘
{
    "$project" : {
        "total" : {
            "$multiply" : ["$fieldname1", "$fieldname2", "..."]
        }
    }
}
//第一个值 除以 第二个值
{
    "$project" : {
        "total" : {
            "$divide" : ["$fieldname1", "$fieldname2"]
        }
    }
}
//第一个值 除以 第二个值 取余
{
    "$project" : {
        "total" : {
            "$mod" : ["$fieldname1", "$fieldname2"]
        }
    }
}
2.字符串表达式

功能:可进行字符串操作,裁剪,拼接,转大写,转小写;

//对param1裁剪,从 param2开始, param3个字节(字节而非字符,多字节编码中注意);
{
    "$project" : {
        "total" : {
            "$substr" : ["$fieldname", 0, 1]
        }
    }
}
//将所有param按顺序拼接(可以是 常量,计算结果,其他字段)
{
    "$project" : {
        "total" : {
            "$concat" : [
            "abc",
            {"$substr" : ["$fieldname", 0, 1]},
            "$fieldname"
            ]
        }
    }
}
//将字段转成小写
{
    "$project" : {
        "total" : {
            "$toLower" : "$fieldname"
        }
    }
}
//将字段转成大写
{
    "$project" : {
        "total" : {
            "$toUpper" : "$fieldname"
        }
    }
}
3.逻辑表达式

功能:有一些逻辑表达式可以用于控制语句;

1.比较表达式
//如果 $fieldname === 0 total = 0;
//如果 $fieldname > 0 total = 1;
//如果 $fieldname < 0 total = -1;
{
    "$project" : {
        "total" : {
            "$cmp" : ["$fieldname", 100]
        }
    }
}
//本书说明区分大小写,mongodb最新官方文档,不区分大小写
//如果 $fieldname === 0 total = 0;
//如果 $fieldname > 0 total = 1;
//如果 $fieldname < 0 total = -1;
{
    "$project" : {
        "total" : {
            "$strcasecmp" : ["$fieldname", "asd"]
        }
    }
}
//"$eq" "$ne" "$gt" "$gte" "$lt" "$lte"
//param1 与 param2 进行比较,返回 true 或 false
{
    "$project" : {
        "total" : {
            "$lt" : ["$fieldname", 10]
        }
    }
}
2.布尔表达式
//"$and" expr1 expr2... 所有表达式 都为true,返回值为true,否则 false
//"$or" expr1 expr2... 所有表达式 任一为true,返回值为true,否则 false
//"$not" expr1 对 expr1 结果取反
{
    "$project" : {
        "total" : {
            "$and": [ { "$gt": [ "$qty", 100 ] }, { "$lt": [ "$qty", 250 ] } ]
        }
    }
}
3.控制语句
//"$cond" param1 结果为true 返回 param2, 否则返回 param3.(类似于js三元运算符)
{
    "$project" : {
        "total" : {
            "$cond": [ { "$gte": [ "$qty", 250 ] }, 30, 20 ]
        }
    }
}
//"$ifNull" param1 结果为null 返回 param2, 否则返回 param1
{
    "$project" : {
        "total" : {
            "$ifNull": [ "$description", "Unspecified" ]
        }
    }
}
4.更多

官方文档