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" ]
}
}
}